之前在处理文本的时候遇到过这样的一个问题,有的字,它看着是一个,但是程序说他是两个,但是实际真的是一个。
好吧,你们一定没有听懂我在讲什么。没关系一起来看看代码
假如有这么一个字符串“黄腾霄好瘦哦”,需要使用程序找出这个字符串包含几个字,怎么找?
var s=“黄腾霄好瘦哦”;
var len=s.Length;
很简单是不是。那再看看这个字符串,“黄腾霄也能算瘦🤔”,不出意料的话应该是8个字对吧?
我们看看上一个程序的输出。
惊了,他居然输出了长度为9。
实际上这个地方的问题出在最后一个emoji上。
让我们先看看这个字符串的Unicode编码是什么样的。
我们看到这个8个字符
的字符串实际上包含了9个Unicode。
而其中整个emoji字符🤔,实际是由2个Unicode字符拼接而成的。
实际上对于“U+D800-U+DFFF”中的值是作为代理字符对存在的,他们会将两个字符映射成为一个字符。
所以在Unicode编码上是2个,而显示上却只有一个。而我们的String.Length恰好就只是读Unicode编码的个数。
所以才会出现多一个的情况。
那么怎么办呢?我们看看下面这个代码
var s