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

标签 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", "👨‍", "👩‍", "👧‍", "👦"]

最佳答案

.NET 将字符串表示为一系列 UTF-16 元素。 Base Multilingual Plane (BMP) 之外的 Unicode 代码点将分为高代理项和低代理项。每个的低 10 位构成实际代码点值的一半。

有帮助程序可以检测这些代理项(例如 Char.IsLowSurrogate)。

你需要自己处理。

关于c# - 如何在 C# 中将一个 Unicode 字符串拆分为多个 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227358/

相关文章:

c# - 继承相关问题

excel - 如何检查字符串(或单元格)中是否包含 kajji 字符?

unicode - Erlang 和带有 Cyrillic 的二进制文件

python - Unicode SendKeys 替代方案(任何编程语言)

matlab - MATLAB 的 Unicode 路径

c# - 我们应该在初始化时将变量设置为 null、false 并创建新对象吗?

c# - core 2.0 - 模拟 Windows 用户的最佳方式?

c# - 如何创建悬停的 C# Winforms 控件

c# - 为采用 List 的 Html.EditorFor 指定模板名称

ios - 如何在 Swift 中创建货币符号的 unicode 值数组?