2016-11-19 48 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有更好的事情要做。 –

相關問題