在 C# 中是否可以使用不在平面 0 中的 UTF-32 字符作为字符?
string s = ""; // valid
char c = ''; // generates a compiler error ("Too many characters in character literal")
并且在 s 中它由两个字符表示,而不是一个。
编辑:我的意思是,是否有一个字符 AN 字符串类型具有完整的 unicode 支持,每个字符为 UTF-32 或 UTF-8?例如,如果我想在字符串中的 utf-32(可能不在 plane0 中)字符上进行 for 循环。
最佳答案
string
class 表示 UTF-16 编码的文本 block ,每个 char
在string
表示一个 UTF-16 编码值。
尽管没有表示单个 Unicode 代码点的 BCL 类型,但以采用 string
的方法重载的形式支持 Plane 0 之外的 Unicode 字符。和一个索引,而不仅仅是一个 char
.例如,静态 GetUnicodeCategory
(char)
System.Globalization.CharUnicodeInfo 上的方法类有对应的 GetUnicodeCategory
(string,int)
识别从指定索引开始的简单字符或代理项对的方法。
遍历 string
中的文本元素,您可以使用 System.Globalization.StringInfo 上的方法类(class)。这里,“文本元素”对应于屏幕上显示的单个字符。这意味着简单字符 ("a"
)、组合字符 ("a\u0304\u0308"
= "ā̈") 和代理项对 ("\uD950\uDF21"
= "��") 都将被视为单个文本元素。
具体来说,GetTextElementEnumerator静态方法将允许您枚举 string
中的每个文本元素。 (有关代码示例,请参阅链接的 MSDN 页面)。
关于C# 和 UTF-16 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697055/