【问题标题】:What does the JNI documentation mean by "Unicode string"?JNI 文档中的“Unicode 字符串”是什么意思?
【发布时间】:2016-11-19 01:28:53
【问题描述】:

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

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

新字符串

jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len);

从 Unicode 字符数组构造一个新的 java.lang.String 对象。

我搜索了 JNI Book 以获得更好的描述,但它让我更加困惑:

JNI 支持与 Unicode 和 UTF-8 之间的转换 字符串。 Unicode 字符串将字符表示为 16 位值 [...]

这个描述让我感到困惑,因为它暗示所有字符都将以 16 位编码,但这对于 Unicode 来说还不够(而且奇怪地暗示 Unicode 和 UTF-8 是替代品)。 JNI Book 的文本中没有出现“UTF-16”。也许 JNI 文档是在一个更纯真的时代编写的,当时只有 BMP,16 位真的就足够了吗?

由于jchar 是 16 位,我猜这里的“Unicode”是指 UTF-16,但我完全不确定。

更新:我注意到UTF-16 的 wiki 页面说“Unicode”是我们现在所知的 UCS-2 的旧术语。但是,它也说 Java 现在使用 UTF-16。因此,我仍然怀疑 JNI 文档中的“Unicode”是指标准 UTF-16,但我通常不使用 JNI 甚至 Java,所以我希望有权威的人加入。

【问题讨论】:

  • 我明白你的意思。我还假设“Unicode 字符串”确实意味着 UTF-16 编码。

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


【解决方案1】:

因此,我仍然怀疑 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 团队中的每个人都需要一段时间才能切换到使用新的、正确的术语.)

【讨论】:

  • 谢谢。会接受。尽管这些年来他们没有更新文档中的术语,但这似乎确实很奇怪。
  • 通过旧规范和更新术语是昂贵的(在人们的时间),而 Sun / Oracle 有更好的事情要做。
猜你喜欢
  • 2011-06-10
  • 2014-02-23
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2019-08-04
  • 2015-01-03
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多