C# 和 UTF-16 字符

标签 c# unicode

在 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/

相关文章:

c# - EmguCV 中的多层感知器

c# - 从带有图像的 XSD 站点地图生成 C# 类

c# - 检索准确日期的最佳方法?

c++ - 如何使用 unicode 在 C++ 中打印立方米?

python - 将 Unicode 写入 .docx 文件

c# - 在 Sqlite 中更新 TOP

C#7 'in' 允许运算符重载的参数

ruby - 无论 ruby​​ 版本如何,都拆分 utf8 字符串

python - 删除非unicode字符python

python - 是否有用于 Unicode 空白的 Python 常量?