JNI在许多需要指定特定编码的地方引用“Unicode字符串”和“Unicode字符”。“Unicode字符串”对于JNI文档有什么意义?
This页面列表JNI函数描述了几个函数作为接受或生成“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书籍的文本中。也许JNI文档是在一个更无辜的时间写的,当时只有BMP和16位真的够了吗?
由于jchar
是16位,我的猜测是“Unicode”在这里意味着UTF-16,但我一点也不确定。
更新:我注意到UTF-16的维基页面说“Unicode”是我们现在称为UCS-2的旧术语。不过,它也表示Java现在使用UTF-16。从那以后,我仍然怀疑JNI文档中的“Unicode”是指标准的UTF-16,但我通常不会使用JNI甚至是Java,所以我希望某个感觉有权威的人加入。
我明白你的观点。我也会假设“Unicode字符串”真的意味着UTF-16编码。 –