日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

009_Get请求中文乱码

發布時間:2025/4/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 009_Get请求中文乱码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 創建一個GBK編碼的html文件, 發送get請求

1. 新建一個GetLuanMa的Web工程

2. 新建一個getGBK.html文件

3. 更改getGBK.html編碼為GBK

4. 編寫getGBK.html

<!DOCTYPE html> <html><head><meta charset="GBK" /><title>get請求中午亂碼處理</title></head><body><form action="GLMGBK.action" method="get">用戶名:<input type="text" name="username" /><br />密碼:<input type="password" name="password" /><br /> <input type="submit" value="登錄"></form></body> </html>

5. 新建一個GetLuanMaGBK.java類

6. 編寫GetLuanMaGBK.java

package com.lywgames.myservlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetLuanMaGBK extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("username = " + username + " password = " + password);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }

7. 編寫web.xml

8. 部署運行, 訪問getGBK.html

9. 點擊登錄按鈕, 控制臺打印

二. 創建一個UTF-8編碼的html文件, 發送get請求

1. 新建一個getUTF8.html

2. 編輯getUTF8.html

<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>get請求中午亂碼處理</title></head><body><form action="GLMUTF8.action" method="get">用戶名:<input type="text" name="username" /><br />密碼:<input type="password" name="password" /><br /> <input type="submit" value="登錄"></form></body> </html>

3. 新建GetLuanMaUTF8.java類

4. 編輯GetLuanMaUTF8.java

package com.lywgames.myservlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetLuanMaUTF8 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("username = " + username + " password = " + password);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }

5. 編輯web.xml

6. 部署運行, 訪問getUTF-8.html

7. 點擊登錄按鈕, 控制臺打印

三. 分析以上編碼為GBK和UTF-8的網頁發送的請求

1. 瀏覽器會對請求的URL中非ASCII碼字符進行編碼。

1.1. 編碼為GBK的網頁(告訴瀏覽器用GBK編碼解析網頁)

1.2. 編碼為GBK的網頁, 發送請求, 瀏覽器地址欄的信息如下:

http://localhost:8080/GetPostLuanMa/GLMGBK.action?username=%B5%C4%B5%C4%C8%B7%C8%B7&password=111

1.3. 在GBK的網頁中, 用戶名"的的確確", 在經過GBK編碼后變成了%B5%C4%B5%C4%C8%B7%C8%B7。

1.4. 編碼為UTF-8的網頁(告訴瀏覽器用UTF-8編碼解析網頁)

1.5. 編碼為UTF-8的網頁, 發送請求, 瀏覽器地址欄的信息如下:

http://localhost:8080/GetPostLuanMa/GLMUTF8.action?username=%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE&password=111

1.6. 在UTF-8的網頁中, 用戶名"的的確確", 在經過UTF-8編碼后變成了%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE。

2. 新建一個URLEncoderDecoder1.java類, 對"的的確確"進行GBK和UTF-8的URLEncoder.encode和URLDecoder.decode, 觀察是不是瀏覽器對"的的確確"進行GBK和UTF-8編碼。

2.1. 新建一個URLEncoderDecoder1.java類

2.2. 編寫URLEncoderDecoder1.java類

package com.lywgames.myservlet;import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;public class URLEncoderDecoder1 {public static void main(String[] args) {try {// URLEncoder.encode("的的確確", "utf-8") ==> %E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE System.out.println(URLEncoder.encode("的的確確", "utf-8"));System.out.println(URLDecoder.decode("%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE", "utf-8"));// URLEncoder.encode("的的確確", "gbk") ==> %B5%C4%B5%C4%C8%B7%C8%B7System.out.println(URLEncoder.encode("的的確確", "gbk"));System.out.println(URLDecoder.decode("%B5%C4%B5%C4%C8%B7%C8%B7", "gbk"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}} }

2.3. 運行程序

四. 解決get請求的中午亂碼

1. tomcat收到客戶端的數據后, 默認使用ISO-8859-1去解碼。

2. 服務器在接收到瀏覽器經過UTF-8編碼后的數據, 進行一次ISO-8859-1解碼, 打印出來的數據為: ????????。

3. 服務器在接收到瀏覽器經過GBK編碼后的數據, 進行一次ISO-8859-1解碼, 打印出來的數據為: μ?μ?è·è·。

4. 編寫URLEncoderDecoder2.java類, 對%B5%C4%B5%C4%C8%B7%C8%B7和%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE, 進行ISO-8859-1的URLDecoder.decode解碼。查看控制臺的輸出信息和Servlet請求時的信息是否一致。

4.1. 新建URLEncoderDecoder2.java類

4.2. 編寫URLEncoderDecoder2.java類

package com.lywgames.myservlet;import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;public class URLEncoderDecoder2 {public static void main(String[] args) {try {// URLEncoder.encode("的的確確", "utf-8") ==> %E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE// URLDecoder.decode("%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE", "ISO-8859-1") ==> ????????System.out.println(URLEncoder.encode("的的確確", "utf-8"));System.out.println(URLDecoder.decode("%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE", "ISO-8859-1"));// URLEncoder.encode("的的確確", "gbk") ==> %B5%C4%B5%C4%C8%B7%C8%B7// URLDecoder.decode("%B5%C4%B5%C4%C8%B7%C8%B7", "ISO-8859-1") ==> μ?μ?è·è·"System.out.println(URLEncoder.encode("的的確確", "gbk"));System.out.println(URLDecoder.decode("%B5%C4%B5%C4%C8%B7%C8%B7", "ISO-8859-1"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}} }

4.3. 運行程序

5. 使用new String("數據信息".getBytes("ISO-8859-1"), "utf-8"), 把"數據信息"打散到ISO-8859-1對應的字節數組 , 然后再按utf-8組拼字符串, 解決亂碼問題。

5.1. 新建一個URLEncoderDecoder3.java類

5.2. 編寫URLEncoderDecoder3.java

package com.lywgames.myservlet;import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder;public class URLEncoderDecoder3 {public static void main(String[] args) {try {// URLEncoder.encode("的的確確", "utf-8") ==> %E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE// URLDecoder.decode("%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE", "ISO-8859-1") ==> ????????System.out.println(URLEncoder.encode("的的確確", "utf-8"));System.out.println(URLDecoder.decode("%E7%9A%84%E7%9A%84%E7%A1%AE%E7%A1%AE", "ISO-8859-1"));// 把????????打散到ISO-8859-1對應的字節數組 , 然后再按utf-8組拼字符串System.out.println(new String("????????".getBytes("ISO-8859-1"), "utf-8"));// URLEncoder.encode("的的確確", "gbk") ==> %B5%C4%B5%C4%C8%B7%C8%B7// URLDecoder.decode("%B5%C4%B5%C4%C8%B7%C8%B7", "ISO-8859-1") ==> μ?μ?è·è·"System.out.println(URLEncoder.encode("的的確確", "gbk"));System.out.println(URLDecoder.decode("%B5%C4%B5%C4%C8%B7%C8%B7", "ISO-8859-1"));// 把μ?μ?è·è·打散到ISO-8859-1對應的字節數組 , 然后再按gbk組拼字符串System.out.println(new String("μ?μ?è·è·".getBytes("ISO-8859-1"), "gbk"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}} }

5.3. 運行程序

6. 修改Servlet解決亂碼問題

6.1. 修改GetLuanMaGBK.java

6.2. 修改GetLuanMaUTF8.java

7. 還有一種比較簡單的解決get請求亂碼的方法, 就是在tomcat里面做設置處理 conf/server.xml 加上URIEncoding="utf-8"

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

總結

以上是生活随笔為你收集整理的009_Get请求中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。