C語言中文網 目錄

Go語言字符類型(byte和rune)

字符串中的每一個元素叫做“字符”,在遍歷或者單個獲取字符串元素時可以獲得字符。

Go 語言的字符有以下兩種:
  • 一種是 uint8 類型,或者叫 byte 型,代表了 ASCII 碼的一個字符。
  • 另一種是 rune 類型,代表一個 UTF-8 字符。當需要處理中文、日文或者其他復合字符時,則需要用到 rune 類型。rune 類型實際是一個 int32。

使用 fmt.Printf 中的%T動詞可以輸出變量的實際類型,使用這個方法可以查看 byte 和 rune 的本來類型,代碼如下:
var a byte = 'a'
fmt.Printf("%d %T\n", a, a)

var b rune = '你'
fmt.Printf("%d %T\n", b, b)
例子輸出結果:

97 uint8
20320 int32


可以發現,byte 類型的 a 變量,實際類型是 uint8,其值為 'a',對應的 ASCII 編碼為 97。

rune 類型的 b 變量的實際類型是 int32,對應的 Unicode 碼就是 20320。

Go 使用了特殊的 rune 類型來處理 Unicode,讓基于 Unicode 的文本處理更為方便,也可以使用 byte 型進行默認字符串處理,性能和擴展性都有照顧。

UTF-8 和 Unicode 有何區別?

Unicode 是字符集,ASCII 也是一種字符集。

字符集為每個字符分配一個唯一的 ID,我們使用到的所有字符在 Unicode 字符集中都有唯一的一個 ID 對應,例如上面例子中的 a 在 Unicode 與 ASCII 中的編碼都是 97。“你”在 Unicode 中的編碼為 20320,但是在不同國家的字符集中,“你”的 ID 會不同。而無論任何情況下,Unicode 中的字符的 ID 都是不會變化的。

UTF-8 是編碼規則,將 Unicode 中字符的 ID 以某種方式進行編碼。UTF-8 的是一種變長編碼規則,從 1 到 4 個字節不等。編碼規則如下:
  • 0xxxxxx 表示文字符號 0~127,兼容 ASCII 字符集。
  • 從 128 到 0x10ffff 表示其他字符。

根據這個規則,拉丁文語系的字符編碼一般情況下,每個字符依然占用一個字節,而中文每個字符占用 3 個字節。

廣義的 Unicode 指一個標準,定義字符集及編碼規則,即 Unicode 字符集和 UTF-8、UTF-16 編碼等。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo