读取EXCEL内容空格或连字符变成问号

该问题之前已被其他兄弟发现并解决过,具体可参考这两篇文章

1.空格变成问号的怪问题--了解问题是如何产生的

2.该问题在读取EXCEL内容这个场景中的处理

今天我要写的是基于这两篇文章的一点延伸,两篇文章都只提到空格变成问号这种情况,我发现还有连字符也会变成问号的情况,或许还有其他特别字符也会变成问号的情况,我们要把源头的罪魁祸首找出来,引用前文的代码

byte[] space = new byte[] { 0xc2, 0xa0 };
string UTFSpace = Encoding.GetEncoding("UTF-8").GetString(space);
name = name.Replace(UTFSpace, " ");

解决这个问题只需要把0xc2,0xa0这两个字节转成字符串,然后在原字符串中把它替换为空格。

那这个0xc2,0xa0又是怎么来的呢?

其实也很简单,只需要把原字符串转成UTF-8的字节码,然后在字节码中找出来就行了,示例如下

byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(name);

如原字符串为"Lin‑Lin",转成字节码是"0x4C,0x69,0x6E,0xE2,0x80,0x91,0x4C,0x69,0x6E",通过对比找出这个连字符的字节码为"0xE2,0x80,0x91",然后再用同样的方法替换为正常的连字符

byte[] lian = new byte[] { 0xe2, 0x80,0x91 };
string UTFLian = Encoding.GetEncoding("UTF-8").GetString(lian);
s = s.Replace(UTFLian, "-");

如果还发现其他特殊字符,也可以通过这种方式找出来了

你可能感兴趣的:(.NET,EXCEL,空格,连字符,问号,UTF8)