Java JNI文档中所说的“JNI”是什么意思;Unicode字符串“;?

Java JNI文档中所说的“JNI”是什么意思;Unicode字符串“;?,java,unicode,character-encoding,java-native-interface,Java,Unicode,Character Encoding,Java Native Interface,JNI在一些必须指定特定编码的地方引用“Unicode字符串”和“Unicode字符” 列出JNI函数的页面将几个函数描述为获取或生成“Unicode字符”。比如说, 新闻字符串 jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len); 从Unicode字符数组构造一个新的java.lang.String对象 我在JNI的书中寻找更好的描述,但它让我更加困惑: JNI支持Unicode和UTF-8之间的转换 串。

JNI在一些必须指定特定编码的地方引用“Unicode字符串”和“Unicode字符”

列出JNI函数的页面将几个函数描述为获取或生成“Unicode字符”。比如说,

新闻字符串

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,但我一点也不确定

更新:我注意到维基页面上说“Unicode”是一个古老的术语,我们现在称之为UCS-2。然而,它也说Java现在使用UTF-16。由此看来,我仍然怀疑JNI文档中的“Unicode”意味着标准UTF-16,但我通常不使用JNI甚至Java,所以我希望有权威人士加入进来

由此看来,我仍然怀疑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团队中的每个人都要花一段时间才能使用新的、正确的术语。)

我明白你的意思。我还假设“Unicode字符串”实际上意味着UTF-16编码。谢谢。我会接受的。尽管这些年来他们一直没有更新文档中的术语,但这似乎很奇怪。查阅旧规范和更新术语的成本很高(在人们的时代),Sun/Oracle还有更好的事情要做。