将std::string转换为使用windows-1256编码的jstring



我正在使用一个库(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库来进行实际的转换。

最新更新