加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将字符串转换为其代码点

发布时间:2020-12-16 01:56:09 所属栏目:百科 来源:网络整理
导读:我必须将大量字符转换为它们的Unicode Code Point等价物.我使用以下代码进行此转换: string sample = "b";int utf32 = char.ConvertToUtf32(sample,0);string codePoint = string.Format("{0:X}",utf32); 这适用于更普通的字符,但是我有这样的字符ǎ,其中实
我必须将大量字符转换为它们的Unicode Code Point等价物.我使用以下代码进行此转换:

string sample = "b";
int utf32 = char.ConvertToUtf32(sample,0);
string codePoint = string.Format("{0:X}",utf32);

这适用于更普通的字符,但是我有这样的字符ǎ,其中实际的字符串包括2个字符a(U-0061)和’?'(U-030C).函数ConverToUtf32(string,int)只返回我实际期待U-0103的第一个(或另一个取决于索引)字符.使用ConvertToUtf32(char,char)不起作用,因为它需要更高代码点的字符.

我可以使用另一个函数将字符串转换为代码点,还是可以执行的计算?

解决方法

I have to convert a large amount of characters to their Unicode Code Point equivalents.

这似乎不是你真正要求的.如果您有来自Basic Multilingual Plane(BMP)的字符,则每个字符对应于一个代码点.转换为UTF-32不会改变任何相关内容.

ConvertToUtf32()方法,尤其是带有两个字符的重载,用于处理非BMP的代码点.但这似乎并不是你所需要的.

你实际上要求的是将normalize字符串改为“规范化形式Canonical Composition”(NFC).为此,请使用the string.Normalize() method:

string decomposed = "x0061x030C";
string composed = decomposed.Normalize(NormalizationForm.FormC);
foreach (char c in composed)
    Console.WriteLine("U+{0:X4}",(int)c);

这将打印“U 01CE”,即LATIN SMALL LETTER A WITH CARON,这似乎是你想要的. (U 030C是COMBINING CARON,所以结果是U 01CE LATIN SMALL LETTER A WITH CARON.如果你真的想要U 0103 LATIN SMALL LETTER A WITH BREVE,你需要使用U 0306 COMBINING BREVE.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读