2016-11-19 24 views
1

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,所以我希望某个感觉有权威的人加入。

+0

我明白你的观点。我也会假设“Unicode字符串”真的意味着UTF-16编码。 –

回答

3

从那以后,我仍然怀疑JNI文档中的“Unicode”意味着标准的UTF-16,但我通常不会使用JNI甚至是Java,所以我希望有人觉得有权威的声音。

这就是它的意思。

JNI书和JNI规范早在1999年就已经写出了......在BMP之外的代码点的使用很普遍之前。 (Unicode 2.0于1996年发布,它将Unicode扩展到16位以上,Java在JDK 1.1中采用了Unicode 2.0,但是,在Sun Java团队中的每个人都转向使用新的,正确的术语。)

+0

谢谢。将接受。这似乎很奇怪,尽管这些年来他们没有更新文档中的术语。 – Praxeolitic

+0

通过旧的规范和更新术语是昂贵的(在人们的时间),Sun/Oracle有更好的事情要做。 –

相关问题