首页
开源软件
问答
博客
翻译
资讯
Gitee
众包
活动
专区
源创会
高手问答
开源访谈
周刊
公司开源导航页
登录
注册
首页
资讯
动弹
专区
问答
GOTC2023
活动
开源活动
开源创新大赛
软件库
Tool
博客
Gitee
首页
资讯
动弹
专区
问答
GOTC2023
活动
开源活动
开源创新大赛
软件库
Tool
博客
Gitee
OSCHINA 小程序 ——
关注技术领域的头条文章
聚合全网技术文章,根据你的阅读喜好进行个性推荐
登录
注册
Servlet一次乱码排查后的总结
项目中多多少少出现过乱码,都是通过手动转码绕过问题,而没有了解为什么乱码,这回遇到此问题后,好好的学习了一番,总结了一些乱码的原因。
作者:
looly
Servlet一次乱码排查后的总结
分享
复制链接
README badge(
)
社交分享
微信
QQ
微博
looly
2014/07/08 11:55
引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。
虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“路小磊”的评论
嘿嘿,十分感谢提问。确实只是略懂一二,毕竟是一次排查中总结的。现在回答下问题: 1、我没有提及页面显示的编码。其实页面编码两个控制:页面内容本身传输到浏览器的编码和Content-Type头中的charset 2、这个问题我在浏览器部分说的,你说的URL编码方式应该和我说的GET方式是一个意思,Request Body就是我说的Post方式吧。 3、这个我在服务器端解码部分做了说明,对应同上。同时强调了Servlet容器在解码中的作用。 4、这个同1,其实服务器端response.setCharacterEncoding本质就是操作Conten-Type头中的charset。 5、这一点确实忽略了,其实我下意识的说所谓解码,解码产物就是Unicode。 6、数据库部分未涉及,因为确实平时涉及的只有MySQL数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~
引用来自“Sub”的评论
讲的不错
。 其实我想说的是,既然楼主碰到了乱码问题,那就顺便好好研究一下乱码的本质。因为每个 Java 程序员在初期基本上都会碰到乱码问题,并且尝试解决了。通常的新手都是这么干的: String name = new String(xxx.getBytes("iso-8859-1"),"GBK")); 而这个解决之道就属于只解决表面问题,因为 xxx 变量已经是错误的编码了,已经埋下了乱码的隐患。在过一段时间,保证又会发生了乱码问题。而正确的解决方法是完全不应该出现类似这样的代码的,而是直接让 xxx 的输入编码正确,而不是解码在编码。 毕竟乱码只是表象,只有了解的 IO 的编码规则之后,基本上以后就不存会在乱码问题了。
现实确实如此~~嘿嘿。
以后继续深入学习~~
回复
举报
Sub
2014/07/08 09:54
引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。
虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“路小磊”的评论
嘿嘿,十分感谢提问。确实只是略懂一二,毕竟是一次排查中总结的。现在回答下问题: 1、我没有提及页面显示的编码。其实页面编码两个控制:页面内容本身传输到浏览器的编码和Content-Type头中的charset 2、这个问题我在浏览器部分说的,你说的URL编码方式应该和我说的GET方式是一个意思,Request Body就是我说的Post方式吧。 3、这个我在服务器端解码部分做了说明,对应同上。同时强调了Servlet容器在解码中的作用。 4、这个同1,其实服务器端response.setCharacterEncoding本质就是操作Conten-Type头中的charset。 5、这一点确实忽略了,其实我下意识的说所谓解码,解码产物就是Unicode。 6、数据库部分未涉及,因为确实平时涉及的只有MySQL数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~
讲的不错
。 其实我想说的是,既然楼主碰到了乱码问题,那就顺便好好研究一下乱码的本质。因为每个 Java 程序员在初期基本上都会碰到乱码问题,并且尝试解决了。通常的新手都是这么干的: String name = new String(xxx.getBytes("iso-8859-1"),"GBK")); 而这个解决之道就属于只解决表面问题,因为 xxx 变量已经是错误的编码了,已经埋下了乱码的隐患。在过一段时间,保证又会发生了乱码问题。而正确的解决方法是完全不应该出现类似这样的代码的,而是直接让 xxx 的输入编码正确,而不是解码在编码。 毕竟乱码只是表象,只有了解的 IO 的编码规则之后,基本上以后就不存会在乱码问题了。
回复
举报
looly
2014/07/08 09:06
引用来自“卜祥龙”的评论
怒赞,学习了~
回复
举报
降龙罗汉
2014/07/07 23:38
怒赞,学习了~
回复
举报
looly
2014/07/07 22:31
引用来自“静风流云”的评论
一般项目规定,不允许get请求带中文。
如果一定要带,自己先用js的encodeURI。
嗯。就是为了绕开浏览器的不同差异~~
回复
举报
looly
2014/07/07 22:31
引用来自“Binny”的评论
不错,把J2EE项目中出新乱码的根本问题将清楚了,收藏一下!
谢谢~~
回复
举报
looly
2014/07/07 22:31
引用来自“kidbei”的评论
我觉得8楼扯远了,博主解析的是servlet请求和返回乱码的问题。你提出的问题不管怎样,结果都是博主说的解决办法,给Content-Type加入编码信息,浏览器按照指定的编码渲染页面。也许博主对编码原理不是很懂,但是对servlet数据交换的编码问题还是基本懂了的。
谢谢~~欢迎多多交流~~
回复
举报
looly
2014/07/07 22:30
引用来自“lwei”的评论
乱码问题表象上比较混乱,本质上,它只会发生在因数据传输而需要编码解码的时候,比如跨网络的传输、应用程序和数据库系统间的传输、或应用程序和文件系统间的传输等等。把握住了这个,解决乱码问题就是按图索骥了,不会没有思路。
嗯。还有就是注意这过程中容器、框架帮我们做了的事情,从而知道问题出在哪里。十分感谢~
回复
举报
looly
2014/07/07 22:28
引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。
虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
嘿嘿,十分感谢提问。确实只是略懂一二,毕竟是一次排查中总结的。现在回答下问题: 1、我没有提及页面显示的编码。其实页面编码两个控制:页面内容本身传输到浏览器的编码和Content-Type头中的charset 2、这个问题我在浏览器部分说的,你说的URL编码方式应该和我说的GET方式是一个意思,Request Body就是我说的Post方式吧。 3、这个我在服务器端解码部分做了说明,对应同上。同时强调了Servlet容器在解码中的作用。 4、这个同1,其实服务器端response.setCharacterEncoding本质就是操作Conten-Type头中的charset。 5、这一点确实忽略了,其实我下意识的说所谓解码,解码产物就是Unicode。 6、数据库部分未涉及,因为确实平时涉及的只有MySQL数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~
回复
举报
looly
2014/07/07 22:09
引用来自“GreatCoder”的评论
我也想吐槽下IE
哈哈~~一起吐槽
回复
举报
looly
2014/07/07 22:09
引用来自“鑫酱”的评论
死变态IE!!!
终于有人看到我这句吐槽了~~哈哈
回复
举报
looly
2014/07/07 22:09
引用来自“成熟的毛毛虫”的评论
赞一个
谢谢
回复
举报
静风流云
2014/07/07 13:24
该评论暂时无法显示,详情咨询 QQ 群:
点此入群
Binny
2014/07/07 12:05
不错,把J2EE项目中出新乱码的根本问题将清楚了,收藏一下!
回复
举报
kidbei
2014/07/07 10:30
我觉得8楼扯远了,博主解析的是servlet请求和返回乱码的问题。你提出的问题不管怎样,结果都是博主说的解决办法,给Content-Type加入编码信息,浏览器按照指定的编码渲染页面。也许博主对编码原理不是很懂,但是对servlet数据交换的编码问题还是基本懂了的。
回复
举报
lwei
2014/07/07 09:47
乱码问题表象上比较混乱,本质上,它只会发生在因数据传输而需要编码解码的时候,比如跨网络的传输、应用程序和数据库系统间的传输、或应用程序和文件系统间的传输等等。把握住了这个,解决乱码问题就是按图索骥了,不会没有思路。
回复
举报
Sub
2014/07/07 09:43
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。
虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
回复
举报
GreatCoder
2014/07/07 09:34
我也想吐槽下IE
回复
举报
oxsicn
2014/07/07 08:10
该评论暂时无法显示,详情咨询 QQ 群:
点此入群
沃德天拉莫帅
2014/07/07 07:49
赞一个
回复
举报
looly
2014/07/05 09:34
引用来自“陈袁at互联”的评论
好久都没有处理过乱码问题了,只要将所有地方的编码统一了。一般不会有乱码!先赞一个!
其实编码统一是最棒的。但是浏览器地址栏里的自动编码因浏览器不同而不同,这个需要特别注意的~
回复
举报
Onegoleya
2014/07/05 05:02
好久都没有处理过乱码问题了,只要将所有地方的编码统一了。一般不会有乱码!先赞一个!
回复
举报
looly
2014/07/04 13:52
引用来自“汪林”的评论
赞
回复
举报
汪林
2014/07/04 13:50
赞
回复
举报
回复 @
{{ emoji.type }}
{{emojiItem.symbol}}
评论用户
推荐博客
Spring Boot 启动注解分析
江南一点雨
·
昨天 17:41
0 评论
执行计划缓存,Prepared Statement性能跃升的秘密
华为云开发者联盟
·
昨天 14:48
0 评论
玩转服务器之应用篇:从零开始构建小型高可用环境
京东云开发者
·
昨天 11:19
0 评论
大型 3D 互动开发和优化实践 | 京东云技术团队
京东云开发者
·
昨天 11:13
0 评论
BFF层聚合查询服务异步改造及治理实践 | 京东云技术团队
京东云开发者
·
昨天 10:44
0 评论
glibc库版本低编译还报错?这个方法帮你解决
神棍地海棠
·
昨天 10:19
0 评论
一次网络请求中的流量分发过程 | 京东云技术团队
京东云开发者
·
昨天 09:46
0 评论
得物App万米高空WiFi拦截记
得物技术
·
前天 19:17
1 评论
编码器-解码器 | 基于 Transformers 的编码器-解码器模型
HuggingFace
·
前天 18:00
0 评论
技术分享 | 一文了解 MySQL Optimizer Trace 的神奇功效
爱可生开源社区
·
05/30 16:30
0 评论
删除一条评论
评论删除后,数据将无法恢复
取消
确定
©OSCHINA(OSChina.NET)
工信部
开源软件推进联盟
指定官方社区
社区规范
深圳市奥思网络科技有限公司版权所有
粤ICP备12009483号
顶部
引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“路小磊”的评论
嘿嘿,十分感谢提问。确实只是略懂一二,毕竟是一次排查中总结的。现在回答下问题: 1、我没有提及页面显示的编码。其实页面编码两个控制:页面内容本身传输到浏览器的编码和Content-Type头中的charset 2、这个问题我在浏览器部分说的,你说的URL编码方式应该和我说的GET方式是一个意思,Request Body就是我说的Post方式吧。 3、这个我在服务器端解码部分做了说明,对应同上。同时强调了Servlet容器在解码中的作用。 4、这个同1,其实服务器端response.setCharacterEncoding本质就是操作Conten-Type头中的charset。 5、这一点确实忽略了,其实我下意识的说所谓解码,解码产物就是Unicode。 6、数据库部分未涉及,因为确实平时涉及的只有MySQL数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~引用来自“Sub”的评论
讲的不错引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“路小磊”的评论
嘿嘿,十分感谢提问。确实只是略懂一二,毕竟是一次排查中总结的。现在回答下问题: 1、我没有提及页面显示的编码。其实页面编码两个控制:页面内容本身传输到浏览器的编码和Content-Type头中的charset 2、这个问题我在浏览器部分说的,你说的URL编码方式应该和我说的GET方式是一个意思,Request Body就是我说的Post方式吧。 3、这个我在服务器端解码部分做了说明,对应同上。同时强调了Servlet容器在解码中的作用。 4、这个同1,其实服务器端response.setCharacterEncoding本质就是操作Conten-Type头中的charset。 5、这一点确实忽略了,其实我下意识的说所谓解码,解码产物就是Unicode。 6、数据库部分未涉及,因为确实平时涉及的只有MySQL数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~引用来自“卜祥龙”的评论
怒赞,学习了~引用来自“静风流云”的评论
一般项目规定,不允许get请求带中文。如果一定要带,自己先用js的encodeURI。
引用来自“Binny”的评论
不错,把J2EE项目中出新乱码的根本问题将清楚了,收藏一下!引用来自“kidbei”的评论
我觉得8楼扯远了,博主解析的是servlet请求和返回乱码的问题。你提出的问题不管怎样,结果都是博主说的解决办法,给Content-Type加入编码信息,浏览器按照指定的编码渲染页面。也许博主对编码原理不是很懂,但是对servlet数据交换的编码问题还是基本懂了的。引用来自“lwei”的评论
乱码问题表象上比较混乱,本质上,它只会发生在因数据传输而需要编码解码的时候,比如跨网络的传输、应用程序和数据库系统间的传输、或应用程序和文件系统间的传输等等。把握住了这个,解决乱码问题就是按图索骥了,不会没有思路。引用来自“Sub”的评论
看来楼主对 Java/浏览器 乱码问题还处在略懂一二的阶段。虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“GreatCoder”的评论
我也想吐槽下IE引用来自“鑫酱”的评论
死变态IE!!!引用来自“成熟的毛毛虫”的评论
赞一个虽然看似解决了问题,实则不是很理想的解决之道。
请认真考虑下面的问题:
1. 浏览器按什么编码显示页面(操作系统? Response Header?)
2. 浏览器按什么编码向服务器提交数据(URL编码方式,Request Body编码方式) (操作系统? Last Response Header)
3. Servlet按什么编码从浏览器接受数据(URL编码方式,Request Body编码方式)
4. Servlet按什么编码向浏览器输出HTML/JSON(Response Body编码方式)
5. Java 本身的 Unicode 编码规则
6. 数据库自身的编码方式,JDBC 驱动连接的编码规则 (读写数据)
引用来自“陈袁at互联”的评论
好久都没有处理过乱码问题了,只要将所有地方的编码统一了。一般不会有乱码!先赞一个!引用来自“汪林”的评论
赞