web中的utf8問題

2021-05-24 23:52:20 字數 910 閱讀 8769

1 瀏覽器會根據content="text/html; charset=gbk"來解析該用什麼編碼來把這些位元組流decode成字串,並顯示;

2 當客戶端提交表單的時候,比如以post方式提交,瀏覽器同樣會根據上面的編碼,把這些字串encode成位元組流,傳送到服務端;

3 在服務端,預設就會認為傳過來的東西就是ascii碼,沒別的,也就是iso-8859-1,所以它就去decode,iso-8859-1中根本沒有中文漢字對應的二進位製碼,沒找到,就亂了應該是一堆口吧;

4 解決辦法是加乙個過濾器,比如gbk,那就設定成request.setcharacterencoding("gbk");這樣服務端在獲取字串的時候,就用gbk去decode這個二進位製流了;

5 如果是ajax,問題又來了,因為ajax只支援utf-8編碼格式,過程應該是這樣:

1. 瀏覽器通過ajax像server端post資料時,ajax自動將瀏覽器中的文字用utf-8 encode成二進位製流,然後傳送到server端;

2. server端如果配置的filter是gbk,那麼會用gbk去decode這個二進位製流,顯然亂麻;但是不應該是一堆口,因為他應該根據二進位製流的每兩位位元組,在gbk編碼表中能找到對應的內容,具體的內容是簡體文字還是繁體文字還是其他的,就不一定了;

此時要是偶數個漢字還好(可以把它用gbk進行encode,然後用utf-8進行decode,這樣就還原回來了),

如果是奇數個漢字就出現丟失了(因為乙個字元用utf-8 encode後為3個位元組,如果三個字元被encode之後,就是9個位元組,當用gbk進行decode 的時候,gbk是用2個位元組,結果剩下了乙個位元組,這個位元組在gbk的編碼表中不存在(因為gbk編碼表都是2個位元組的),所以就用?號填充了)。

3. 所以必須在服務端的fiter中對ajax請求進行判斷,用jquery為例:

$.ajax(

utf8 和 UTF 8 在使用中的區別

在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...

utf8 和 UTF 8 在使用中的區別

在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...

utf8 和 UTF 8 在使用中的區別

在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...