在C#中是否可以使用不在Plane 0中的UTF-32字符作为char?
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
类表示文本的UTF-16编码的块,并且每个char
在string
表示UTF-16码值.
虽然没有代表单个Unicode代码点的BCL类型,但是以方法重载的形式支持超出平面0的Unicode字符,它采用a string
和索引而不是a char
.例如,System.Globalization.CharUnicodeInfo类GetUnicodeCategory
(char)
上的静态方法具有相应的方法,该方法将识别从指定索引开始的简单字符或代理项对.GetUnicodeCategory
(string,int)
要遍历a中的文本元素string
,可以使用System.Globalization.StringInfo类中的方法.这里,"文本元素"对应于屏幕上显示的单个字符.这意味着简单的字符("a"
),组合字符("a\u0304\u0308"
="ā̈")和代理对("\uD950\uDF21"
=" ")都将被视为单个文本元素.
具体来说,GetTextElementEnumerator静态方法将允许您枚举a中的每个文本元素string
(请参阅链接的MSDN页面以获取代码示例).