gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:46:41 25 4
gpt4 key购买 nike

我正在使用一个库 (libcurl),该库请求包含一些阿拉伯语内容的特定网页。当我获得字符串响应时,它包含阿拉伯字符,并且整个响应在 WINDOWS-1256 中编​​码。

问题是阿拉伯字符没有正确显示。

有没有办法将 std::string 转换为 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 的特殊 modified UTF-8 )并返回 UTF-16 编码的 JString .

因此,您必须先将原始阿拉伯语数据从 Windows-1256 转换为(修改后的)UTF-8,然后再调用 NewStringUTF()。更好的选择是直接将数据转换为 UTF-16,然后使用 JNI 的 NewString() 函数。但无论哪种方式,您都可以使用 libiconv , ICU4JNI ,或您选择的任何其他 Unicode 库,以一种或另一种方式进行实际转换。

关于c++ - 将 std::string 转换为使用 windows-1256 编码的 jstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28821578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com