Tho*_*mas 2 character-encoding go
我在这个博客上读到这个
即使使用符文切片,单个字符也可能跨越多个符文,例如,如果您的字符带有重音符,就会发生这种情况。“字符”的这种复杂和模糊的性质是 Go 字符串被表示为字节序列的原因。
这是真的吗?(这似乎是一个了解 Go 的人写的博客)。我在我的机器上测试过,“è”是 1 个符文和 2 个字节。而围棋文档似乎另有说。
你遇到过这样的角色吗?(utf-8) 在 Go 中一个字符可以跨越多个符文吗?
是的,它可以:
s := "e???"
fmt.Println(s, []rune(s))
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
e??? [101 769 769 769]
Run Code Online (Sandbox Code Playgroud)
一个角色,4个符文。它可能是任意长...
示例取自Go 博客:Go 中的文本规范化。
什么是字符?
正如字符串博客文章中提到的,字符可以跨越多个符文。例如,“e”和“??” (急性“\u0301”)可以组合形成“é”(NFD 中的“e\u0301”)。这两个符文加在一起是一个字符。字符的定义可能因应用程序而异。为了规范化,我们将其定义为以起始符开头的符文序列,一个不修改或与任何其他符文反向组合的符文,其后可能是非起始符的空序列,也就是说,符文(通常是重音符号) )。归一化算法一次处理一个字符。
一个字符可以跟任意数量的修饰符(修饰符可以重复和堆叠):
理论上,可以组成一个 Unicode 字符的符文数量是没有限制的。事实上,对可以跟随一个角色的修饰符的数量没有限制,修饰符可以重复或堆叠。见过带有三个锐角的“e”吗?给你:'e???'。根据标准,这是一个完全有效的 4 符文字符。
另请参阅:组合字符。
编辑: “这不是扼杀了‘符文概念’吗?”
答:这不是符文的概念。Arune不是字符。符文是标识 Unicode 代码点的整数值。一个字符可能是一个 Unicode 代码点,在这种情况下 1 个字符是 1 rune。runes 的大多数一般用法都适合这种情况,因此在实践中这几乎不会让人头疼。它是Unicode 标准的一个概念。
| 归档时间: |
|
| 查看次数: |
2151 次 |
| 最近记录: |