C#和UTF-16字符

Dut*_*tow 7 c# unicode

在C#中是否可以使用不在Plane 0中的UTF-32字符作为char?

string s = ""; // valid
char c = ''; // generates a compiler error ("Too many characters in character literal")
Run Code Online (Sandbox Code Playgroud)

在s中它由两个字符表示,而不是一个.

编辑:我的意思是,是否有一个字符AN字符串类型,每个字符支持完整的unicode,UTF-32或UTF-8?例如,如果我想在字符串中的utf-32(可能不在plane0中)字符上进行for循环.

Emp*_*LII 10

string类表示文本的UTF-16编码的块,并且每个charstring表示UTF-16码值.

虽然没有代表单个Unicode代码点的BCL类型,但是以方法重载的形式支持超出平面0的Unicode字符,它采用a string和索引而不是a char.例如,System.Globalization.CharUnicodeInfoGetUnicodeCategory(char)上的静态方法具有相应的方法,该方法将识别从指定索引开始的简单字符或代理项对.GetUnicodeCategory(string,int)


要遍历a中的文本元素string,可以使用System.Globalization.StringInfo类中的方法.这里,"文本元素"对应于屏幕上显示的单个字符.这意味着简单的字符("a"),组合字符("a\u0304\u0308"="ā̈")和代理对("\uD950\uDF21"=" ")都将被视为单个文本元素.

具体来说,GetTextElementEnumerator静态方法将允许您枚举a中的每个文本元素string(请参阅链接的MSDN页面以获取代码示例).