为什么System.Text.Rune是这样命名的?

问题描述 投票:0回答:1

简介

.NET 使用 UTF-16 进行字符串编码。这意味着:

  • char 类型,字符串的原子单位,是 16 位大小的数据类型。
  • 代理对用于补充码点U+10000..U+10FFFF,而对于基本多语言平面,U+0000..U+FFFF,一个字符足以表达任何 Unicode 标量值.

.NET Rune 能够绕过代理对问题,例如他们的意外分手。因此,通过一个变量可以表达所有标量值。

var a = new Rune('a');
var grinnigFace = new Rune ( '\uD83D', '\uDE00' );
grinnnigFace.ToString();
"😀"

术语

存在许多与字符串和字符类型相关的术语:符号、字符、象形图、表情符号、字形、脚本、字母、标记、标点符号、重音符号、变音符号、表情符号…….NET 选择使用 文本元素 作为含义的同义词是 Unicode 中的字素 +/ 簇。

Unicode® 技术标准#51

请注意,所有表情符号序列都是单个字素簇:

使用“grapheme”也不是 100% 正确。

字素

在语言学中,字素是书写系统的最小功能单位。

假设这个🧑🏿u200d🎄表情符号由以下序列组成:

  • 1F9D1,🧑,\Ud83e\Uddd1
  • 1F3FF,🏿,\Ud83c\Udfff
  • 200D,u200d,\U200d
  • 1F384,🎄,\Ud83c\Udf84

几乎不可能有任何单元被视为书写系统的功能单元。

文档Unicode® 标准:技术简介更具体。

例如,在历史悠久的西班牙语排序中,“ll”;计为单个文本元素。但是,当输入西班牙语单词时,“ll”是两个单独的文本元素:“l”和“l”。

文本元素被编码为一个或多个字符的序列。其中某些序列称为组合字符序列,由一个基本字母和一个或多个组合标记组成,这些组合标记围绕基本字母呈现(在其上方、下方等)。例如,“a”序列后跟组合扬抑符“^”将呈现为“â”。

文本/文本元素上可以看到 Unicode 和 .NET 之间的一些交集。尽管如此,相当不透明的术语统治是显而易见的。

符文

https://www.vocabulary.com/dictionary/rune

符文是早期日耳曼文字中使用的字母。语言学家可能对符文感兴趣,因为它们是古代语言的证据,而神秘主义者可能会在算命中使用符文,一些人认为符文具有神奇的特性。

https://www.thefreedictionary.com/rune

  • 1a:3 世纪至 13 世纪古日耳曼民族使用的几种字母表中的任何字符。
  • 1b:另一个字母表中的类似字符,有时被认为具有魔力。
  • 2:具有神秘意义的诗歌或咒语,尤其是魔咒。

结论

深入研究后,“符文” 与 Unicode 使用的任何术语都不相同,似乎与日耳曼部落的书写系统紧密结合。据我所知,Rune 只不过是Unicode Scalar Value。 UCP 是通过 1:1 数字关系、代理对还是通过一系列的狗和猫来表达并不重要。可以说 .NET 即将为术语炖牛肉做出贡献:

  • 为什么 Rune 不是 UnicodeScalarValue 或者更技术准确的东西?
  • 我没有找到任何关于为什么选择这个名字的参考资料。
  • 有什么具体原因吗?
  • 或者 Rune 就像字素、字形、符号和其他一样好?
.net string unicode utf-16 unicodescalar
1个回答
0
投票

所以,我在 Rune in .NET vs. other languages

找到了它

Unicode 标准中未定义术语“符文”。该术语可以追溯到 UTF-8 的创建。 Rob Pike 和 Ken Thompson 正在寻找一个术语来描述最终被称为代码点的东西。 他们确定了“rune”这个术语,Rob Pike 后来对 Go 编程语言的影响帮助普及了这个术语。

© www.soinside.com 2019 - 2024. All rights reserved.