站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

java中請(qǐng)求亂碼解決方法

java中請(qǐng)求亂碼解決方法

出現(xiàn)的問題:

通過get請(qǐng)求向服務(wù)器發(fā)送請(qǐng)求時(shí),如果請(qǐng)求參數(shù)為中文時(shí),服務(wù)器端接受到的參數(shù)為亂碼。

亂碼原因分析及解決辦法:

1、關(guān)于解碼和編碼

編碼:'中'→1110001

解碼:1110001→'中'

亂碼:編碼和解碼過程中使用了不同的字符集

2、Web應(yīng)用中字符編碼解碼的問題

(1)請(qǐng)求過程:

<1>GET請(qǐng)求

瀏覽器端是以UTF-8進(jìn)行編碼,所以在服務(wù)器端也應(yīng)該以UTF-8進(jìn)行解碼

由于GET請(qǐng)求參數(shù)附著在URL地址后面,所以要統(tǒng)一的URL地址的解碼字符集。

解決辦法:

在tomcat配置文件server.xml中找到第一個(gè)connector加入如下屬性 URIEncoding=UTF-8

<2>POST請(qǐng)求

在獲取請(qǐng)求參數(shù)前執(zhí)行:request.setCharacterEncoding("UTF-8");

(2)響應(yīng)過程

(1)指定響應(yīng)數(shù)據(jù)的編碼字符集

(2)告訴瀏覽器響應(yīng)數(shù)據(jù)應(yīng)該使用什么字符集進(jìn)行解碼

<1>Tomcat服務(wù)器會(huì)自動(dòng)根據(jù)“解碼字符集”設(shè)置“編碼字符集”

<2>設(shè)置編碼字符集:告訴瀏覽器當(dāng)前響應(yīng)數(shù)據(jù)的內(nèi)容類型:response.setContentType("text/html;charset=UTF-8");需要注意的是,需要在response.getWriter();之前設(shè)置,否則無效。

建議:

所有的過濾器都只對(duì)POST請(qǐng)求起作用,在jsp頁面中設(shè)置字符編碼方式,都只是對(duì)表單提交時(shí)的POST請(qǐng)求起作用,對(duì)GET請(qǐng)求不能起到設(shè)置其字符編碼的作用,

在GET請(qǐng)求中使用的是默認(rèn)的編碼方式,所以對(duì)GET請(qǐng)求,需要在server.xml文件中設(shè)置URIEncoding="UTF-8"然后重啟TOMCAT便可以實(shí)現(xiàn)解決中文亂碼問題,

但是不建議在href超鏈接請(qǐng)求中傳達(dá)中文參數(shù),也不建議在GET請(qǐng)求中傳遞中文參數(shù)。

另外對(duì)傳遞的部分中文實(shí)現(xiàn)傳遞和接收時(shí)的統(tǒng)一的編碼方法在傳達(dá)參數(shù)時(shí)使用

"reply.jsp?title="+java.net.URLEncoder.encode(keywords)

然后在接收參數(shù)頁面使用keywords=new String(request.getParameter("keywords").getBytes("8859_1"));這種方式雖然暫時(shí)解決了中文亂碼問題,

但是在后期的維護(hù)和部署到其他的服務(wù)器時(shí)可以仍會(huì)會(huì)出現(xiàn)中文亂碼了問題,所以不建議使用。

對(duì)于Post請(qǐng)求,只需在Servlet或者jsp中寫入如下代碼就可以把解決從表單中傳入的中文亂碼問題

 request.setCharacterEncoding("utf-8");

了解:

而對(duì)于Get請(qǐng)求,因?yàn)檎?qǐng)求參數(shù)會(huì)被附加到地址欄的URL之后,所以不能用上面的處理方法。應(yīng)該這樣:

   String str=request.getQueryString();    //使用URLDecoder解碼字符串    String str1=java.net.URLDecoder.decode(str,"utf-8");    String[] paraStrings=str1.split("&");     //paraStrings[0]就是第一個(gè)參數(shù),依次類推...    for(String paraString : paraStrings)    {          String[] nameValue=paraString.split("=");          //nameValue[0]就是表單的name,nameValue[1]就是表單name對(duì)應(yīng)的值    }

還有一種方法就是獲取請(qǐng)求參數(shù)之后對(duì)請(qǐng)求參數(shù)值重新編碼,也就是先將其轉(zhuǎn)換成字節(jié)數(shù)組,再將字節(jié)數(shù)組重新解碼成字符串。

  String str=request.getParameter("name");   byte[] bytes=str.getBytes("ISO-8859-1");   String name=new String(bytes,"utf-8");

結(jié)論:傳遞中文參數(shù)時(shí),最好使用POST請(qǐng)求來提交。不同服務(wù)器設(shè)置編碼方式可能不同,不同操作系統(tǒng)設(shè)置編碼方式也可能不同。

推薦:java基礎(chǔ)教程

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
伊人精品久久久久7777| 久久精品国产99久久无毒不卡| 亚洲一区二区三区精品视频| 日韩久久久久久中文人妻| 99re5在线精品视频热线| 日韩精品一区二区三区四区 | 国色精品卡一卡2卡3卡4卡免费| 精品久久久无码中文字幕天天| 亚洲国产日韩在线视频| 99久久精品免费精品国产| 午夜精品久久影院蜜桃| 亚洲Av永久无码精品一区二区| 国产精品视频第一区二区三区| 亚洲 日韩经典 中文字幕| 99精品热这里只有精品| 国产成人麻豆亚洲综合无码精品| 国产精品白嫩在线观看| 精品无码人妻一区二区三区品| 亚洲А∨精品天堂在线| 精品三级内地国产在线观看| 99re这里有免费视频精品| 精品综合久久久久久88小说| 国产免费无遮挡精品视频| 色花堂国产精品第一页| 国产精品扒开腿做爽爽爽视频| 无码国模国产在线无码精品国产自在久国产 | 午夜天堂精品久久久久| 亚洲国产成人精品女人久久久 | 久久只有这才是精品99| 精品人妻无码专区中文字幕| 国产成人久久精品麻豆二区 | 中文字幕日韩精品有码视频| 久久亚洲精品国产亚洲老地址| 久久国产精品免费专区| 久久久99精品一区二区| 日韩精品一区二区午夜成人版| 国产精品爽爽V在线观看无码| 69久久精品无码一区二区| 中国精品videossex中国高清| 国产精品丝袜一区二区三区 | 国产香蕉九九久久精品免费|