我必须将大量字符转换为其对应的 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/