JNI在必须指定特定编码的许多地方引用“Unicode字符串”和“Unicode字符”。
列出JNI函数的This页面描述了获取或生成“Unicode字符”的几个函数。例如,
NewString
jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len);
从Unicode字符数组构造一个新的java.lang.String对象。
我搜索了JNI书以获得更好的描述,但这让我更加困惑:
JNI支持Unicode和UTF-8之间的转换 字符串。 Unicode字符串将字符表示为16位值[...]
这个描述让我感到困惑,因为它表明所有字符都将以16位编码,但这对于Unicode来说还不够(而且奇怪的是它意味着Unicode和UTF-8是替代品)。 “UTF-16”没有出现在JNI Book的文本中。也许JNI文档是在一个更无辜的时候编写的,当时只有BMP和16位真的足够了吗?
由于jchar
是16位,我的猜测是“Unicode”在这里意味着UTF-16,但我完全不确定。
更新:我注意到UTF-16的维基页面说“Unicode”是我们现在所知的UCS-2的旧术语。但是,它也说Java现在使用UTF-16。从那时起,我仍然怀疑JNI文档中的“Unicode”意味着标准的UTF-16,但我通常不会使用JNI甚至Java,因此我希望有人能够感受到权威性。
答案 0 :(得分:3)
从那时起,我仍然怀疑JNI文档中的“Unicode”意味着标准的UTF-16,但我通常不会使用JNI甚至是Java,因此我希望有人能够感受到权威性。
这就是它的意思。
JNI Book和JNI规范是很久以前(1999年)编写的......在BMP之外使用代码点之前很常见。
(Unicode 2.0于1996年发布,它将Unicode扩展到16位以上.Java在JDK 1.1中采用了Unicode 2.0。但是,Sun Java团队中的每个人都转而使用新的正确术语需要一些时间。)