如何在C#中将Unicode字符串拆分为多个Unicode字符?

时间:2017-02-14 13:26:03

标签: c# unicode

如果我有一个像"123‍‍‍"这样的字符串,我怎么能把它拆分成一个看起来像["", "1", "2", "3", "‍‍‍"]的数组?如果我使用ToCharArray(),则第一个表情符号分为2个字符,第二个表情符号分为7个字符。

更新

解决方案现在看起来像这样:

public static List<string> GetCharacters(string text)
{
    char[] ca = text.ToCharArray();
    List<string> characters = new List<string>();
    for (int i = 0; i < ca.Length; i++)
    {
        char c = ca[i];
        if (c > ‭65535‬) continue;
        if (char.IsHighSurrogate(c))
        {
            i++;
            characters.Add(new string(new[] { c, ca[i] }));
        }
        else
            characters.Add(new string(new[] { c }));
    }
    return characters;
}

请注意,正如评论中所述,它对家庭表情符号不起作用。它仅适用于2个字符或更少字符的表情符号。示例的输出为:["", "1", "2", "3", "‍", "‍", "‍", ""]

1 个答案:

答案 0 :(得分:5)

.NET将字符串表示为UTF-16元素序列。基本多语言平面(BMP)之外的Unicode代码点将分为高和低代理。每个低10位形成实际代码点值的一半。

有帮助者可以检测这些代理人(例如Char.IsLowSurrogate)。

你需要自己处理。