先准备一个网页

<html>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>测试编码</title>
<body>
<form id="form1" name="form1" method="post" action="http://localhost:8080/TestServer/Receive">
<label>
<input type="text" name="name" />
</label>
<label>
<input type="submit" name="SBbt" value="提交" />
</label>
</form>
</body>
</html>

输入中文字,名字   “何锦彬”  进行提交

提交到servelt , 用servelt输出收到的内容

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
InputStream input = request.getInputStream();
BufferedInputStream inputBf = new BufferedInputStream(input);
byte[] buf = new byte[1024];
int length = inputBf.read(buf);
byte[] receviveData = new byte[length];
System.arraycopy(buf, 0, receviveData, 0, length); System.out.println("收到:" + new String(receviveData)); // System.out.println(request.getParameter("name"));
}

输出如下:

收到:name=%BA%CE%BD%F5%B1%F2&SBbt=%CC%E1%BD%BB

尝试把"何锦彬" 按GBK转成 16进制输出

ffffffba ffffffce ffffffbd fffffff5 ffffffb1 fffffff2 

忽略前面的'f', 会发现,servelt接受到的内容就是: 中文经过GBK编码转码后, 用16进制标识, 并在前面加上"%"以作区分

继续修改修改网页的meta信息,把"GBK" 换成"utf-8"

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

输出如下:

收到:name=%E4%BD%95%E9%94%A6%E5%BD%AC&SBbt=%E6%8F%90%E4%BA%A4

明显 name 后面是9个字符,是用UTF-8转码后16进制表示了字节后再加了'%' 组成

整个过程如下

1, 把中文根据mate 里的字符编码转换成字节

2, 把字节加上百分号并用16进制表示

(1,2部相当于java.net.URLEncoder.encode(content,"utf-8"))

3. 进行传输

4, WEB容器进行解码,相当于调用

TOMCAT中相关代码

org.apache.tomcat.lite.http.HttpRequest    672行

 try {
parameters.add(urlDecode(tmpName, enc),
urlDecode(tmpValue, enc));
} catch (IOException e) {
// ignored
}

最新文章

  1. SFC中的问题描述
  2. Java导出Word利用freemarker(含图片)
  3. [转]ubuntu 14.04 如何开启和关闭触控板
  4. 已知一个日期和天数, 求多少天后的日期(是那个超时代码的AC版)
  5. kettle转换JavaScript加载外部js文件
  6. Baxter机器人---安装SDK包(二)
  7. PostgreSQL9.6新功能
  8. oracle的substr和replace
  9. POJ 1013 小水题 暴力模拟
  10. this与super使用总结(java)
  11. ural1028 Stars
  12. 全面解析Bootstrap图片轮播效果
  13. Saltstack自动化运维
  14. ceph在品高云中的实践
  15. 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
  16. Activity工作过程
  17. React Native之配置URL Scheme(iOS Android)
  18. CentOS6.5安装Maven3.2.5
  19. NGINX的几个应用场景
  20. ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang

热门文章

  1. 在Ubuntu下搭建ASP.NET 5开发环境
  2. 菜鸟学Struts2——Interceptors
  3. SignalR代理对象异常:Uncaught TypeError: Cannot read property &#39;client&#39; of undefined 推出的结论
  4. JavaScript Date对象
  5. springMVC初始化绑定器
  6. CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
  7. .NET基础拾遗(3)字符串、集合和流
  8. 快速web开发中的前后端框架选型最佳实践
  9. 锤子OneStep及BigBang使用体验
  10. Electron 不完全快速手册