2 回答

TA貢獻1856條經(jīng)驗 獲得超11個贊
第一點要明確,ajax 發(fā)送的中文是以什么 編碼(GBK 或utf-8 或 iso-8859-1)發(fā)送給后臺servlet 的,
第二點,當后臺接受到 ajax發(fā)過來的請求時,你要設置 用什么編碼去解析 ajax發(fā)送過來的數(shù)據(jù)
request.setCharacterEncoding("???");
上2步弄明白了,就不會出現(xiàn)亂碼。
第一, ajax 發(fā)送字符的編碼是由這個網(wǎng)頁所決定的,這個網(wǎng)頁的字符編碼是 UTF-8,那么 ajax發(fā)送的字符就以 utf-8 發(fā)送到后臺(不過 form表單里面的有個屬性可以設置以什么字符編碼發(fā)送給后臺)。你在頁面知道是 UTF-8編碼(或者用 document.charset 獲取編碼),但是 后臺不知道,所以,在ajax中設置一個 charset屬性為 utf-8(xmlHttp.setRequestHeader("Context-Type", "Charset=UTF-8");),告訴后臺 發(fā)過來的是 utf-8編碼的字符,
第二,上面說到 http請求中 charset 屬性指明編碼為 utf-8,但是,服務器不會給你自動轉(zhuǎn)換,默認都是使用 iso-8859-1(誰叫服務器都是老外開發(fā)的,他們根本都沒想到這玩兒會流行全世界,會有各種各樣的字符編碼,不過提供了一個方法讓我們自己設置編碼也算高明的了),所以后臺頁面要你自己獲取這個值,然后 設置轉(zhuǎn)換編碼
request.setCharacterEncoding("UTF-8");

TA貢獻1828條經(jīng)驗 獲得超6個贊
有幾個方法吧,第一
在首選項里面把默認jsp頁面編碼格式改為UTF-8.具體設置方法可百度,參考我的<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>(其他格式的也行。個人愛UTF-8)
第二,
在servlet中加上這么一句話,response.setContentType("text/html");request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");可能是這個問題的概率大。(注:會設置項目全部去過濾則不用這么麻煩一般這樣也行)。
第三
轉(zhuǎn)換全球通用格式。比如a=您好就可以轉(zhuǎn)換為a=\u60A8\u597D。把后面那個字母數(shù)字的東西放到哪里也不會亂碼。轉(zhuǎn)換軟件JDK目錄下有。不會可百度。詳細的就不說了。自己查查長知識吧。
以上三種方法基本可以解決全部亂碼問題。
添加回答
舉報