讀取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, "-");

如果還發現其他特殊字符,也可以通過這種方式找出來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章