1 回答

TA貢獻1783條經驗 獲得超4個贊
是的,它可以:
s := "e???"
fmt.Println(s, []rune(s))
輸出(在Go Playground上試試):
e??? [101 769 769 769]
一個角色,4個符文。它可能是任意長...
示例取自The Go 博客:Go 中的文本規范化。
什么是字符?
正如字符串博客文章中提到的,字符可以跨越多個符文。例如,“e”和“??”(急性“\u0301”)可以組合形成“é”(NFD 中的“e\u0301”)。這兩個符文加在一起是一個字符。字符的定義可能因應用程序而異。為了規范化,我們將其定義為以起始符開頭的符文序列,一個不修改或與任何其他符文反向組合的符文,其后可能是非起始符的空序列,即,符文(通常是重音符號) )。歸一化算法一次處理一個字符。
一個字符可以跟任意數量的修飾符(修飾符可以重復和堆疊):
理論上,可以組成一個 Unicode 字符的符文數量是沒有限制的。事實上,可以跟隨一個角色的修飾符的數量沒有限制,修飾符可以重復或堆疊。見過帶有三個銳角的“e”嗎?給你:'é??'。根據標準,這是一個完全有效的 4 符文字符。
另請參閱:組合字符。
編輯: “這不是扼殺了‘符文概念’嗎?”
答:這不是符文的概念。Arune不是字符。符文是標識 Unicode 代碼點的整數值。一個字符可能是一個 Unicode 代碼點,在這種情況下 1 個字符是 1 rune。runes 的大多數一般用法都適合這種情況,因此在實踐中這幾乎不會讓人頭疼。它是Unicode 標準的一個概念。
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報