ajax中文亂碼最終解決,網頁亂碼問題心得

2021-04-20 07:04:08 字數 2182 閱讀 6985

用過ajax的人都會碰到中文亂碼,網上基然有很多方法,但看完之後,很多人仍然解決不了亂碼問題,為什麼有的網頁始終都會返回亂碼,不管怎麼設定呢?本人經研究終於解決,其實是個很原理的問題,但因為現在不知道底層原理而做高階應用是主流人群,所以會有很多人不知道,包括我自己.

說到網頁的編碼,要分兩分部分,一部分是網頁文件本身的編碼,就是你用記事本開啟,另存為時,可以選ansi或utf-8,這是文件本身的編碼,另一種是宣告的編碼,就是我們程式寫的,如asp的response.charset="gb2312",這是告訴其它程式本文是用什麼編碼,而response.charset="gb2312",這句話的作用其實只是在html的標頭檔案(head)裡面加上了content-typ : text/html; charset=gb2312這樣一句話,xmlhttprequest,或msxml2.serverxmlhttp,或者ie都是通過分析這個標頭檔案來決定自己用什麼編碼來解析這個文件

如果我們的文件是用utf-8存的,那麼我們的標頭檔案就要寫content-typ : text/html; charset=utf-8這樣在轉輸過程中就不會錯,不對應就會出現亂碼

所以,如果我們要訪問的檔案是utf-8儲存的,我們就要寫response.charset="utf-8",如果是gb2312儲存的,我們就要寫response.charset="gb2312",因這ajax裡面的元件預設是用utf-8解析,所以用utf-8儲存的檔案不用特別宣告,但gb2312儲存的檔案要特別宣告

我們的ie如果中文版的話,預設是用gb2312來解析,所以你的客戶端網頁檔案要是gb2312儲存的,如果是utf-8,則你要特別宣告一下

下面說一下靜態頁html

我們雖然設了,但這並不會改變html的標頭檔案,html的標頭檔案並不是所謂的標籤裡面的東西,那是給ie看的,html文件的標頭檔案預設是content-type : text/html,所以,如果html是用gb2312存的,那用ajax是怎麼也不能顯示中文的.為了解決這個問題,就必需在iis設定 裡面加個頭檔案,content-typ : text/html; charset=gb2312

就可以了

記事本ansi如果是中文版 ,就是代表gb2312

如果你無法修改服務端的內容,如果出現亂碼,就不要用responsetext 用responsebody

因為responsebody是流檔案,我們可以進行編碼轉換,responsetext 是轉換後的文字,無法再進行轉換了

**如下

一般的動態網頁,我們是可以修改標頭檔案的,所以我們在接收utf-8服務端回傳的文符串時,ajax可以判斷標頭檔案來顯示正確的文字.

如果我們無法改變檔案的標頭檔案,那我們只有把接收到的流檔案轉換成我們需要的格式.

現在我們說說ajax給服務端傳送資料,

我們有很多頁面是gb2312的,我們要給utf-8的伺服器端發資料時,我們要urlencode,對於.net的服務端而言,他可以接受utf-8或gb2312的兩種urlcode,所以我們要做的是

如果我們是gb2312頁面,我們就要用gb2312的方式進行urlencode,如果是utf-8頁面,就要用utf-8的方式進行urlencode.

本人親試,對於js程式,gb2312的網面,用escape進行urlenocde,對於utf-8,可以用encodeuri() 或encodeuricomponent() 方法,兩者的區別是編碼的範圍不同,encodeuricomponent() 要更多一點.

AJAX中文亂碼PHP完美解決

geturl encodeuri geturl 兩次也可以寫成geturl encodeuri encodeuri geturl 然後再到伺服器端進行url解碼 str urldecode str 解碼 str iconv utf 8 gb2312 str 編碼轉換 注意 解碼必須在編碼轉換前面,不...

AJAX中文亂碼PHP完美解決

最近在做乙個專案,遇到ajax中文亂碼問題,經過乙個下午的努力終於完美解決,現將心得寫下來,希望對那些還困繞在這個問題而頭痛不已的人們有所幫助。眾所周知,使用ajax傳送和接收中文引數時,如果不在客戶端和伺服器做相應的處理就會出現亂碼問題,在網上相應的文章也不少,但是有的情況下很難從中找到符合自己理...

網頁中文亂碼

如果網頁顯式申明了支援中文的編碼 如 原因1網頁內容本身的編碼與utf 8不相容。是你之前用某工具編輯過網頁內容,儲存為另乙個編碼格式。解決方案 用eclipse webstrom ue等,新建乙個html文件,將 copy過去,儲存為utf 8。原因2 後台返回的資料與utf 8不相容 解決方案 ...