Go語言從入門到精通 - 字符類型

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

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

Go 語言的字符有以下兩種:

  • 一種是 uint8 類型,或者叫 byte 型,byte類型的值需用8個比特位表示,代表了 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 編碼等。

視頻和代碼

鏈接:https://pan.baidu.com/s/1XLyXP9Hadyl3j4mpMC-rLw
提取碼:89ux

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章