我正在使用一个库(libcurl)来请求某个阿拉伯语内容的网页。当我获得字符串响应时,它具有阿拉伯字符,整个响应在WINDOWS-1256中编码。
问题是阿拉伯语字符没有正确显示。
有没有办法将std :: string转换为WINDOWS-1256中编码的jstring?
通过我尝试env->NewStringUTF(str.c_str());
并且应用程序崩溃的方式。
答案 0 :(得分:1)
Java字符串使用UTF-16。除了UTF-8和UTF-16之外,JNI没有charset编码的概念(除非你使用JNI调用直接访问Java的Charset
类,但Java只实现了一小部分字符集,Windows-1256
是除非底层Java JVM专门实现它,否则不是其中之一。)
JNI的NewStringUTF()
函数需要UTF-8输入(而不仅仅是标准的UTF-8,而是Java的特殊modified UTF-8)并返回UTF-16编码的JString
。
因此,在调用NewStringUTF()
之前,您必须首先将原始阿拉伯数据从Windows-1256转换为(已修改)UTF-8。更好的选择是直接将数据转换为UTF-16,然后使用JNI的NewString()
函数。但无论哪种方式,您都可以使用libiconv,ICU4JNI或您选择的任何其他Unicode库来实现自己的实际转换。