如果我有一个像 "😀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/