.NET如何将字符串分隔为字符
.NET如何将字符串分隔为字符
如果这是一道面试题,答案也许非常简单:.ToCharArray()
,这基本正确……
我们以“AB吉𠮷😁👨👩👧👦”作为输入参数,首先如果按照“正常”处理的思路,用.ToCharArray()
,然后转换为JSON
(以便方便查看)返回结果如下:
[ "A", "B", "吉", "�", "�", "�", "�", "�", "�", "", "�", "�", "", "�", "�", "", "�", "�" ]
不出所料,出现了大量乱码。
正常一个字符(Unicode
基平面)应该是占用一个char
(2字节)没错,但如果涉及4
字节Unicode
或Emoji
,这个问题就不简单了。
- 首先,
32
位Unicode
占用两个char
,如:𠮷; - 其次,某些
emoji
可能占用超过两个char
,可能多达11
个,如:👨👩👧👦;
代码演示如图:
下面我将一一演示我的解决过程。
32
位Unicode
我知道在.NET
中,如果一个char
无法容纳一个字符,char.IsHighSurrogate()
方法传入这个char
就会返回true
,这时即可做处理。按照这个思路,解决方法如下:
IEnumerable<string>