gpt4 book ai didi

C# 和 UTF-16 字符

转载 作者:太空狗 更新时间:2023-10-29 19:59:17 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com