如何在C#中将Unicode字符串拆分为多个Unicode字符?
问题描述:
如果我有一个像"123"
这样的字符串,我怎么能把它分成一个数组,看起来像["", "1", "2", "3", ""]
?如果我使用ToCharArray()
,则第一张表情符号被分成2个字符,第二个表情符号分成7个字符。如何在C#中将Unicode字符串拆分为多个Unicode字符?
更新
的解决方案现在看起来是这样的:
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 > 65000) 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元素。基本多语言平面(BMP)之外的Unicode代码点将被拆分为高位和低位代理。每个的低10位形成实际码点值的一半。
有助手可以检测到这些替代品(例如Char.IsLowSurrogate
)。
你需要自己处理。
'+ + + ='好笑,不知道 – fubo
这是怎么发生的?表情符号用于文本渲染引擎。处理包含表情符号的文本大致相当于处理中文文本的乐趣。或Zalgo,如果你想要一个真正的挑战:)认识到代用品不是其他火箭科学,使用Char.IsLowSurrogate()。 –