gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:12:23 25 4
gpt4 key购买 nike

我必须将大量字符转换为其对应的 Unicode 代码点。我使用以下代码进行此转换:

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),则每个 char 恰好对应一个代码点。转换为 UTF-32 不会对此有任何改变。

ConvertToUtf32() 方法,尤其是采用两个 char 的重载用于处理不是来自 BMP 的代码点。但这似乎不是您所需要的。

您实际上要求的是 normalize将字符串转化为“规范化形式规范组合”(NFC)。为此,请使用 the string.Normalize() method :

string decomposed = "\x0061\x030C";
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 代替。)

关于c# - 将字符串转换为其代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812427/

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