亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中,一個角色可以跨越多個符文嗎?

在 Go 中,一個角色可以跨越多個符文嗎?

Go
慕容3067478 2022-01-04 10:59:44
我在這個博客上讀到這個即使使用符文切片,單個字符也可能跨越多個符文,例如,如果您的字符帶有重音符,就會發生這種情況?!白址钡倪@種復雜和模糊的性質是 Go 字符串被表示為字節序列的原因。這是真的嗎?(這似乎是一個了解 Go 的人寫的博客)。我在我的機器上測試過,“è”是 1 個符文和 2 個字節。而圍棋文檔似乎另有說。你遇到過這樣的角色嗎?(utf-8) 在 Go 中,一個字符可以跨越多個符文嗎?
查看完整描述

1 回答

?
慕娘9325324

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 標準的一個概念。


查看完整回答
反對 回復 2022-01-04
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號