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 的编码规则之后,基本上以后就不存会在乱码问题了。
2014/07/08 09:06

引用来自“卜祥龙”的评论

怒赞,学习了~
2014/07/07 23:38
怒赞,学习了~
2014/07/07 22:31

引用来自“静风流云”的评论

一般项目规定,不允许get请求带中文。
如果一定要带,自己先用js的encodeURI。
嗯。就是为了绕开浏览器的不同差异~~
2014/07/07 22:31

引用来自“Binny”的评论

不错,把J2EE项目中出新乱码的根本问题将清楚了,收藏一下!
谢谢~~
2014/07/07 22:31

引用来自“kidbei”的评论

我觉得8楼扯远了,博主解析的是servlet请求和返回乱码的问题。你提出的问题不管怎样,结果都是博主说的解决办法,给Content-Type加入编码信息,浏览器按照指定的编码渲染页面。也许博主对编码原理不是很懂,但是对servlet数据交换的编码问题还是基本懂了的。
谢谢~~欢迎多多交流~~
2014/07/07 22:30

引用来自“lwei”的评论

乱码问题表象上比较混乱,本质上,它只会发生在因数据传输而需要编码解码的时候,比如跨网络的传输、应用程序和数据库系统间的传输、或应用程序和文件系统间的传输等等。把握住了这个,解决乱码问题就是按图索骥了,不会没有思路。
嗯。还有就是注意这过程中容器、框架帮我们做了的事情,从而知道问题出在哪里。十分感谢~
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数据库,所以没有说明。 再次感谢如此认真对待这个问题,我需要学习的还很多,希望指导和共同交流~~
2014/07/07 22:09

引用来自“GreatCoder”的评论

我也想吐槽下IE
哈哈~~一起吐槽
2014/07/07 22:09

引用来自“鑫酱”的评论

死变态IE!!!
终于有人看到我这句吐槽了~~哈哈
2014/07/07 22:09

引用来自“成熟的毛毛虫”的评论

赞一个
谢谢
2014/07/07 13:24
该评论暂时无法显示,详情咨询 QQ 群:点此入群
2014/07/07 12:05
不错,把J2EE项目中出新乱码的根本问题将清楚了,收藏一下!
2014/07/07 10:30
我觉得8楼扯远了,博主解析的是servlet请求和返回乱码的问题。你提出的问题不管怎样,结果都是博主说的解决办法,给Content-Type加入编码信息,浏览器按照指定的编码渲染页面。也许博主对编码原理不是很懂,但是对servlet数据交换的编码问题还是基本懂了的。
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 驱动连接的编码规则 (读写数据)
2014/07/07 09:34
我也想吐槽下IE
2014/07/07 08:10
该评论暂时无法显示,详情咨询 QQ 群:点此入群
2014/07/07 07:49
赞一个
2014/07/05 09:34

引用来自“陈袁at互联”的评论

好久都没有处理过乱码问题了,只要将所有地方的编码统一了。一般不会有乱码!先赞一个!
其实编码统一是最棒的。但是浏览器地址栏里的自动编码因浏览器不同而不同,这个需要特别注意的~
2014/07/05 05:02
好久都没有处理过乱码问题了,只要将所有地方的编码统一了。一般不会有乱码!先赞一个!
2014/07/04 13:52

引用来自“汪林”的评论

2014/07/04 13:50
回复 @
{{emojiItem.symbol}}
返回顶部
顶部