【发布时间】:2016-11-19 01:28:53
【问题描述】:
JNI 在许多必须指定特定编码的地方引用“Unicode 字符串”和“Unicode 字符”。
This 列出 JNI 函数的页面将几个函数描述为获取或生成“Unicode 字符”。例如,
新字符串
jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len);从 Unicode 字符数组构造一个新的 java.lang.String 对象。
我搜索了 JNI Book 以获得更好的描述,但它让我更加困惑:
JNI 支持与 Unicode 和 UTF-8 之间的转换 字符串。 Unicode 字符串将字符表示为 16 位值 [...]
这个描述让我感到困惑,因为它暗示所有字符都将以 16 位编码,但这对于 Unicode 来说还不够(而且奇怪地暗示 Unicode 和 UTF-8 是替代品)。 JNI Book 的文本中没有出现“UTF-16”。也许 JNI 文档是在一个更纯真的时代编写的,当时只有 BMP,16 位真的就足够了吗?
由于jchar 是 16 位,我猜这里的“Unicode”是指 UTF-16,但我完全不确定。
更新:我注意到UTF-16 的 wiki 页面说“Unicode”是我们现在所知的 UCS-2 的旧术语。但是,它也说 Java 现在使用 UTF-16。因此,我仍然怀疑 JNI 文档中的“Unicode”是指标准 UTF-16,但我通常不使用 JNI 甚至 Java,所以我希望有权威的人加入。
【问题讨论】:
-
我明白你的意思。我还假设“Unicode 字符串”确实意味着 UTF-16 编码。
标签: java unicode character-encoding java-native-interface