前台的字串傳遞到後台進行處理,發現了乙個較詭異的問題:字串中的乙個空格(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#)如下所示:
privatestring 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...