JNI文档的“Unicode字符串”是什么意思?

时间:2016-11-19 01:28:54

标签: java unicode character-encoding java-native-interface

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,因此我希望有人能够感受到权威性。

1 个答案:

答案 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团队中的每个人都转而使用新的正确术语需要一些时间。)