2012年8月12日 星期日

Unicode 與 UTF-8 的差異,以及 Java 中的字元表達方式

參考資料:
1、[Other]Unicode/UTF-8的差異
2、字符编码笔记:ASCII,Unicode和UTF-8
3、Wikipedia:Unicode
4、Wikipedia:UTF-8
5、char to Unicode more than U+FFFF in java?
6、JavaRanch:java String UTF8

在看 SCJP 的書時看到 Java 的 char 是 16-bit 的 un-signed integer,用來組成 Unicode 的字元編碼。
所以來簡單查一下 Unicode 跟 UTF-8 的差異~
之前也曾經查過相關資料,但是連結沒有留起來 XD
簡單來說就是 UTF-8 是其中一種實作 Unicode 概念的編碼方法
也可以稱之為是 Unicode 的改良版,主要是用動態的位元組來表達字元
並且因為可以用 1 個位元組表示英文,所以也完全相容 ASCII 編碼。
其他比較詳細的說明就請參考上面的 [1-4] 吧 XD

接著是在 Java 中的字元到底是如何表示的問題~
[5] 的回應中 kandarp 有提到一段話:
「The Java 2 platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes.」
在 char、String、StrinBuffer 當中都是用 UTF-16 來表達字元
另外 [6] 的回應中,Francis Shillitoe 也提到:
「Strings in java are always stored in unicode UCS-2 (also know as UTF-16).」
我手邊的書上只有說 Java 的 char 是用 Unicode 表示,但並沒有提到是哪一種實作的 Unicode
(我想書上指的 Unicode 應該指的是一種文字編碼的規則,並不是指實作編碼規則的方法吧)
按照 [5-6] 的說法,應該是使用 UTF-16 來表達文字吧。

PS. [6] 的回應中,Francis Shillitoe 提到一句話:「UTF-8 is not Unicode, it is a way of encoding unicode.」
我想那應該是搞清楚差異的關鍵吧。

沒有留言: