UTF 8編碼的空格(194 160)問題

2021-09-07 21:35:03 字數 1036 閱讀 8933

前台的字串傳遞到後台進行處理,發現了乙個較詭異的問題:字串中的乙個空格(ascii:32)被utf-8編碼之後變成了乙個詭異的字元(ascii:194 和 160的組合)!但在後台其表象還是空格。

在utf-8編碼裡面存在乙個特殊的字元,其編碼是「0xc2 0xa0」,轉換成字元的時候表現為乙個半角空格,跟一般的半形空格(ascii 0x20)不同的是它的寬度不會被壓縮,所以排版中常能用到它。但是gb2312、unicode之類並沒有這樣的字元,所以轉換後前台會顯示為「?」號,只是顯示為問號而不是真正的問號,所以無法被替換!

對這兩個看似相同的字串進行一下轉換可以確認:原始的字串為:」#'  %$ ()_ -{}.b「  被轉義後的字串為:」#'  %$ ()_ -{}.b「 【注:雙引號不算,轉換為byte陣列之後可以看到,原來的是16個位元組,後來的那個是17個位元組:這就是 32 --> 194  160 的結果】

string tmp1 = "

#' %$ ()_ -{}.b";

string tmp2 = "

#'  %$ ()_ -{}.b";

byte o1 =encoding.utf8.getbytes(tmp1);

byte o2 = encoding.utf8.getbytes(tmp2);

知道了這個原因之後,就好辦了,寫**可以把194 和 160 的組合轉換回去。程式(c#)如下所示:

private

string changeutf8space(string

targetstr)

;string tempspace = encoding.getencoding("

utf-8

").getstring(utf8space);

currentstr = targetstr.replace(tempspace, "");

return

currentstr;

}catch

(exception ex)

}

更多的編碼格式對照表可以看這篇文章:

UTF 8編碼的空格(194 160)問題

前台的字串傳遞到後台進行處理,發現了乙個較詭異的問題 字串中的乙個空格 ascii 32 被utf 8編碼之後變成了乙個詭異的字元 ascii 194 和 160的組合 但在後台其表象還是空格。在utf 8編碼裡面存在乙個特殊的字元,其編碼是 0xc2 0xa0 轉換成字元的時候表現為乙個半角空格,...

介紹utf8編碼

utf8並不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個unicode ucs字元都以 2或4個bytes來儲存,看看以下的比較 以 i am chinese 為例 用ansi儲存 12 bytes 用unicode ucs2儲存 24 bytes 2 bytes header 用uc...

UTF8編碼 解碼

參考文件 rfc3629標準.對於任意乙個字,都可以用乙個唯一碼 unicode碼,由標準編制 表示,在應用過程中,需要對碼進行編碼.常用的編碼方式為utf 8.utf 8採用類似於ip位址分配的機制.即對於不同範圍的unicode碼,採用不同的模板進行編碼.流程概述為 2.1 查表獲取unicod...