一. 创建一个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请求中文乱码相关推荐

  1. Spring-解决请求中文乱码问题

    Spring-解决请求中文乱码问题 参考文章: (1)Spring-解决请求中文乱码问题 (2)https://www.cnblogs.com/andyfengzp/p/6197993.html (3 ...

  2. postmain请求中午乱码_完美解决Get和Post请求中文乱码的问题

    对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); ...

  3. 【Servlet】HTTP请求中文乱码的问题

    请求中文乱码 在进行请求参数传递时,经常会遇到请求数据为中文时的乱码问题,当Form表单的文本域中输入中文时会产生乱码问题,出现乱码的原因与客户端的请求编码方式(GET请求或POST请求)以及服务器的 ...

  4. Tomcat 中 GET方式 请求 中文乱码 出现的原因

    网上很多关于GET方式请求中文乱码的解决方案,大体类似. 这里主要讲一下Tomcat在处理URL参数过程中, 究竟是为什么会导致了GET方式请求的中文乱码. 一句话概括就是: Tomcat默认将单字节 ...

  5. 解决get请求中文乱码问题

    在很多情况下get请求会发生中文乱码的情况,而换做post就不会,这其中的根本原因是get请求默认的是使用"iso-8859-1"编码,接下来介绍两种种解决get请求编码的方法 1 ...

  6. html请求socket乱码,Socket http请求中文乱码有关问题

    Socket http请求中文乱码问题 各位高手,麻烦帮忙看看这个 http请求乱码问题,百思不得其解啊.... Socket http请求"http://www.gome.com.cn/e ...

  7. Get,Post请求中文乱码问题有效解决方法

    对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 ...

  8. 请求中文乱码_【1】执行Http请求访问网页

    向导团队 - fourkings [1]执行Http请求访问网页 1. 目标网址 我们的目标网址是当当网,url地址是 http://book.dangdang.com/ 2. 获取HTML文档内容 ...

  9. get请求中文乱码问题

    Get中文乱码解决 Get请求类型: <form action="${pageContext.request.contextPath}/addArtical.action"  ...

最新文章

  1. 阿里云帮助江苏省财政厅力推统一公共支付平台
  2. clion修改选中行的背景颜色
  3. python猫狗大战讲解_tensorflow实现猫狗大战(分类算法)
  4. 安装python缺少dll_Microsoft.PythonTools.dll
  5. Angular移动工具集要让Web应用有原生的感觉
  6. mongodb副本集维护
  7. 谷粒商城:15.商城业务 — 商品上架
  8. 通达信公式-当天成交量不大于百日均成交量比例
  9. 在ubuntu系统中安装sublime
  10. 关于阿里云服务器的问题及答案(详细汇总)
  11. android系统证书导入工具,添加Fiddler/Mitmproxy证书为安卓系统证书
  12. 关于上下文映射看这篇就够了
  13. 如何使用OBS 进行屏幕录制
  14. vue3 路由的使用
  15. C++编程 一个正整数的立方和
  16. 计算机网络中关于路由器的作用
  17. App界面交互设计规范
  18. python 生成ppt 比例_如何用Python将PDF转化为PPT
  19. mysql--数据库创建及执行sql语句
  20. 【庖丁解牛】Navicat for MySQL连接时候报错1251无法连接MySQL

热门文章

  1. shell之字体颜色显示
  2. C++中的static函数和extern关键字
  3. ToolPart的简单开发
  4. 如何快速在GitHub上找到感兴趣的开源项目
  5. 5G对数据中心的架构产生的影响-vecloud微云
  6. 企业局域网离不开交换机/路由器/防火墙—Vecloud
  7. JS创建对象学习笔记
  8. Mybatis ResolverUtil的设计概念
  9. Python直接赋值,浅拷贝和深度拷贝
  10. PHP培训教程 PHP里10个鲜为人知但却非常有用的函数