将 std::string 转换为使用 windows-1256 编码的 jstring
convert std::string to jstring encoded using windows-1256
我正在使用一个库 (libcurl),该库请求包含一些阿拉伯语内容的特定网页。当我获得字符串响应时,它包含阿拉伯字符,并且整个响应编码为 WINDOWS-1256.
问题是阿拉伯字符没有正确显示。
有没有办法将 std::string 转换为 WINDOWS-1256 编码的 jstring?
顺便说一下,我试过 env->NewStringUTF(str.c_str());
应用程序崩溃了。
Java 字符串使用 UTF-16。除了 UTF-8 和 UTF-16 之外,JNI 没有字符集编码的概念(除非您使用 JNI 调用直接访问 Java 的 Charset
class,但仅 Java实现了一小部分字符集,Windows-1256
不是其中之一,除非底层 Java JVM 专门实现了它。
JNI 的 NewStringUTF()
函数需要 UTF-8 输入(不仅是标准的 UTF-8,还有 Java 的特殊 modified UTF-8)和 returns UTF-16编码 JString
.
因此您必须先将原始阿拉伯数据从 Windows-1256 转换为(修改后的)UTF-8,然后再调用 NewStringUTF()
。更好的选择是直接将数据转换为 UTF-16,然后使用 JNI 的 NewString()
函数。但无论哪种方式,您都可以使用 libiconv, ICU4JNI 或您选择的任何其他 Unicode 库以一种或另一种方式进行实际转换。
我正在使用一个库 (libcurl),该库请求包含一些阿拉伯语内容的特定网页。当我获得字符串响应时,它包含阿拉伯字符,并且整个响应编码为 WINDOWS-1256.
问题是阿拉伯字符没有正确显示。
有没有办法将 std::string 转换为 WINDOWS-1256 编码的 jstring?
顺便说一下,我试过 env->NewStringUTF(str.c_str());
应用程序崩溃了。
Java 字符串使用 UTF-16。除了 UTF-8 和 UTF-16 之外,JNI 没有字符集编码的概念(除非您使用 JNI 调用直接访问 Java 的 Charset
class,但仅 Java实现了一小部分字符集,Windows-1256
不是其中之一,除非底层 Java JVM 专门实现了它。
JNI 的 NewStringUTF()
函数需要 UTF-8 输入(不仅是标准的 UTF-8,还有 Java 的特殊 modified UTF-8)和 returns UTF-16编码 JString
.
因此您必须先将原始阿拉伯数据从 Windows-1256 转换为(修改后的)UTF-8,然后再调用 NewStringUTF()
。更好的选择是直接将数据转换为 UTF-16,然后使用 JNI 的 NewString()
函数。但无论哪种方式,您都可以使用 libiconv, ICU4JNI 或您选择的任何其他 Unicode 库以一种或另一种方式进行实际转换。