ホームページ >ウェブフロントエンド >jsチュートリアル >jquery中国語文字化けのさまざまな解決策_jquery

jquery中国語文字化けのさまざまな解決策_jquery

WBOY
WBOYオリジナル
2016-05-16 17:31:511454ブラウズ

1. $.ajax を使用した中国語文字化けの解決策:

コードをコピー コードは次のとおりです。

var _realname = $("input[name ='_searchName ']").val();
var termcourseId = '<%=termid%>';
var classId = '<%=classid%>';
var url = " /addressbook/studentListNoPage.do";
//var dataUrl = "formMap.TERMCOURSE_ID=" termcourseId "&formMap.CLASS_ID=" classId "&formMap.IS_ONLINE=all&formMap.REALNAME=" _realname; ajax({
type: "POST",
url: url,
dataType: "json",
data: {
termcourse "formMap.TERMCOURSE_ID": Id,
" formMap.CLASS_ID" :classId,
"formMap.IS_ONLINE":"all",
"formMap.REALNAME":encodeURI(_realname)
" -www-form-urlencoded; ,
success: function(data){
data = eval(data);


のうち、 dataUrl の & メソッドでは、フロントエンドが中国語のトランスコードに encodeURI または encodeURIComponent またはエスケープを使用するかどうかに関係なく、Action に送信されたコードは文字化けし、漢字の変換後の望ましいエンコーディングではありません。 contentType を追加しても機能しません。

dataUrl の送信方法 & を data:{name:value} の送信方法に変更します。

アクションで URLDecoder.decode(realname, "UTF-8") を使用してトランスコードし、中国語に変換します。 UTF-8 が使用されるのは、Jquery の送信メソッドがデフォルトで UTF-8 に設定されているためです。contentType の文字セットが GBK など、他のものに変更され、バックグラウンドで UTF-8 が GBK に変更されても、正しく変換できません。

jQuery の ajax コードが文字化けする問題の解決策
1. テスト環境
jQuery:1.3.2
tomcat:5.5.172. get メソッドを使用します

server ターミナル Java コード:


コードをコピー


コードは次のとおりです:


文字列名= new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");クライアント JS コード:

コードをコピーします

コードは次のとおりです:
$.ajax({url: "2.jsp",type: "get ",data: {name:" Chinese"},success: function(response){alert(response);}});結果: 正しい表示



コードをコピーします

コードは次のとおりです:
$.ajax({url: "2.jsp" 、タイプ: "get"、データ: "name = Chinese"、成功: function(response){alert(response);}});結果: 文字化けしたコード



コードをコピー

コードは次のとおりです。
$.get("2.jsp" 、{ 名前: "中国語" },function(response){alert(response);});
結果: 正しく表示されました
コードをコピーします コードは次のとおりです:

$。 get(" 2.jsp", "name=中文",function(response){
alert(response);
});

結果: 文字化けしたコード

2.post メソッド
サーバー側 Java コード:

コードをコピー コードは次のとおりです:

request.setCharacterEncoding("UTF-8");
文字列名 = request.getParameter("name");

クライアント JS コード:
コードをコピーします コードは次のとおりです:

$.ajax({url: "3.jsp",タイプ: "post"、データ: "method=testAjaxPost&name=中文"、成功: function(response){
alert(response);
}});

結果:
コードをコピーします コードは次のとおりです:
$.ajax({url: "3.jsp"、タイプ: "post "、データ: {name:"中文"}、成功: function(response){
alert(response);
}});

結果: 正しい表示

コードをコピー コードは次のとおりです:
$。 post("3.jsp", { name: "中国語 " },function(response){
alert(response);
});

結果: 正しく表示されました

コードをコピーします コードは次のとおりです:
$.post("3.jsp", "name=中文",function(response){
alert(response ; >
コードは次のとおりです:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain チェーン) が IOException、ServletException をスローする {
HttpServletRequest req = (HttpServletRequest) request;
if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With) ").equalsIgnoreCase("XMLHttpRequest")) {
request.setCharacterEncoding("utf- 8"); } else { request.setCharacterEncoding("gbk"); } chain.doFilter(request, response);}
jQuery が ajax を使用する場合、値は次のとおりです: XMLHttpRequest。これはjQueryのajaxリクエストであり、文字エンコーディングはutf8に設定されています。これにより、投稿後の中国語の文字化けの問題を解決できます。コード内でrequest.setCharacterEncoding("UTF-8")を設定する必要はありません。 >getメソッドの中国語文字化け問題については、プロトタイプとの整合性を保つため、getメソッドを使用せずにpostすることをお勧めします。 js は中国語を処理します。次のメソッドを使用して、ヘッダーの属性 RequestType をカスタマイズできます




コードをコピー


コードは次のとおりです。


$.ajax({
url: "3.jsp",
type: "post",
data: {name:"中文"},
beforeSend: function(XMLHttpRequest){
XMLHttpRequest.setRequestHeader("RequestType", "ajax");
alert("Start");
}, success: function(data, textStatus){ alert(data); }, error: function(XMLHttpRequest, textStatus, errorThrown){alert("Error: " textStatus); },
complete: function (XMLHttpRequest, textStatus){
alert("Complete:" textStatus);
}
});


filter代码如下:
复制代码代码如下:

public void doFilter(ServletRequest request, ServletResponse 応答,
FilterChain チェーン) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if (req.getHeader("RequestType") != null && req.getHeader("RequestType ").equalsIgnoreCase("ajax"))) {
request.setCharacterEncoding("utf-8");
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(リクエスト, レスポンス);
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。