将std::string转换为使用windows-1256编码的jstring
convert std::string to jstring encoded using windows-1256
我正在使用一个库(libcurl),它请求某个包含一些阿拉伯语内容的网页。当我获得字符串响应时,它有阿拉伯字符,整个响应在WINDOWS-1256中编码。
问题是阿拉伯字符不能正确显示。
有没有办法将std::字符串转换为在WINDOWS-1256中编码的jstring?
顺便说一句,我尝试了env->NewStringUTF(str.c_str());
,但应用程序崩溃了。
Java字符串使用UTF-16。除了UTF-8和UTF-16之外,JNI没有字符集编码的概念(除非您使用JNI调用直接访问Java的Charset
类,但Java只实现了一小部分字符集,Windows-1256
不是其中之一,除非底层Java JVM专门实现它)。
JNI的NewStringUTF()
函数需要UTF-8输入(不仅是标准UTF-8,还有Java特殊的修改的UTF-8),并返回UTF-16编码的JString
。
因此,在调用NewStringUTF()
之前,必须先将Windows-1256中的原始阿拉伯语数据转换为(修改后的)UTF-8。更好的选择是直接将数据转换为UTF-16,然后使用JNI的NewString()
函数。但无论哪种方式,您都可以使用libiconv、ICU4JNI或您选择的任何其他Unicode库来进行实际的转换。
相关文章:
- C++ u8 文字 - Windows 上的意外编码
- 使用具有 UTF8 编码的源文件将 UTF8 符号打印到 Windows 控制台
- 使用 UDP 协议从 Windows 套接字发送到 Qt 套接字的网络数据包上的结构编码和解码
- Windows API base64编码/解码
- 将DER编码的X509证书缓冲区转换为Windows cert_context结构
- Windows的unicode数据类型使用什么unicode编码(UTF-8、UTF-16等)
- Windows中控制台输出流的编码
- Windows媒体基础使用原始图像对视频进行编码
- UTF8 文本编码 - Windows Phone 8.1 C++
- 将std::string转换为使用windows-1256编码的jstring
- 从 Linux 到 Windows 交叉编译时,我应该如何处理字符编码
- 如何在 Windows API 中指定与编码无关的字符串常量
- Windows NT 二进制可执行文件内部常量字符串编码
- 有没有一种方法可以在c++中检测Windows和Linux上的文件名编码
- Qt 5编码问题(UTF-8、Windows-1250、Windows-1251)
- Windows CryptoAPI对称编码/解码块已经对齐
- 为什么使用中文代码页集的Windows控制台可以显示UTF-16编码的字符
- 无法设置windows媒体视频9屏幕编码器
- 在 c++ Windows 中打开 utf8 编码的文件名
- 如果DLL将在多个平台上使用,那么在编码中使用windows依赖项是否安全?