.NET如何将字符串分隔为字符

如果这是一道面试题,答案也许非常简单:.ToCharArray(),这基本正确……

我们以“AB吉𠮷😁👨‍👩‍👧‍👦”作为输入参数,首先如果按照“正常”处理的思路,用.ToCharArray(),然后转换为JSON(以便方便查看)返回结果如下:

[   "A",   "B",   "吉",   "�",   "�",   "�",   "�",   "�",   "�",   "‍",   "�",   "�",   "‍",   "�",   "�",   "‍",   "�",   "�" ]

不出所料,出现了大量乱码。

正常一个字符(Unicode基平面)应该是占用一个char(2字节)没错,但如果涉及4字节UnicodeEmoji,这个问题就不简单了。

  • 首先,32Unicode占用两个char,如:𠮷;
  • 其次,某些emoji可能占用超过两个char,可能多达11个,如:👨‍👩‍👧‍👦;

代码演示如图:

下面我将一一演示我的解决过程。

32Unicode

我知道在.NET中,如果一个char无法容纳一个字符,char.IsHighSurrogate()方法传入这个char就会返回true,这时即可做处理。按照这个思路,解决方法如下:

IEnumerable<string>