JavaWeb编码和乱码解决方法
来源:互联网 发布:坛水墨水官网淘宝 编辑:程序博客网 时间:2024/05/21 10:25
为什么会出现乱码
我们知道,计算机数据只能是二进制的,数值类型的数据转换成二进制很简单,我们已经了解了,但字符类型如何转换成二进制呢?它需要一定的规则,而这些就是编码表!
字符按照某种编码表转换成二进制格式称为编码,而把二进制按某种编码表还原成字符称为解码。若编码和解码两个过程参照的编码表不一样,这是就会产生乱码。
无论浏览器发送过来的是什么编码的数据,Tomcat都默认使用ISO-8859-1来解码,ISO-8859-1是不支持中文的!!!
请求编码
①若浏览器的地址栏中请求的URL含有中文请求参数
中文按照浏览器规定的编码表进行编码,不同的浏览器使用不同的编码。
- IE:使用UTF-8;
- FireFox:使用GB2312;
- Chrome:使用UTF-8;
②在页面中发出请求
客户端首先要打开一个页面,然后在页面中提交表单或点击超链接!在请求这个页面时,服务器响应的编码是什么,
那么客户端发送请求时的编码就是什么。
响应编码
当响应的是字符数据时,我们必须要考虑编码的问题。
例如:response.getWriter( ).println("张"); 在默认情况下,“张”在服务器端会按照默认的ISO-8859-1来编码,那么在浏览器中显示的一定是乱码。所以我们自己要指定“张”的编码按照UTF-8格式(或其他支持中文的编码)。此时,我们还不能保证不会出现乱码,因为不同的浏览器会按照自己的默认编码表来进行解码,故我们还要指定浏览器对“张”的解码必须也是UTF-8(或其他支持中文的编码)。
URL编码
通过页面传输数据给服务器时,如果包含了一些特殊字符是无法发送的。这时就需要先把要发送的数据转换成URL编码格式,再发送给服务器。其实需要我们自己动手给数据转换成URL编码的只有GET超链接,因为表单发送数据会默认使用URL编码(Tomcat会自动URL解码,例如:req.getParameter(),但若是自己通过IO流解析字节数据,则Tomcat不会自动URL解码),也就是说,不用我们自己来编码。
URL编码需要先指定一种字符编码,把字符串解码后,得到byte[ ],然后把小于0的字节+256,再转换成16进制。前面再添加一个%。形如:%AE%6B%1E
URL编码:String username = URLEncoder.encode(username, "utf-8");
URL解码:String username = URLDecoder.decode(username, "utf-8");
五、乱码解决办法
Get请求:没有方法可以设置它,因为参数在url中。所以使用request.getParameter()获取到的数据一定是错误的使用了iso-8859-1解码的。可以再使用iso-8859-1把字符串转回到byte[],再重新使用正确的编码来解码即可。
String s = request.getParameter("s");//使用iso-8859-1错误的解码了
byte[] bytes = s.getBytes("iso-8859-1");//退回错误的解码,让字符串通过iso-8859-1返回到字节数据,即还原字节数据
s = new String(bytes, "utf-8");//重新使用正确的utf-8来解码。
POST请求:
request.setCharacterEncoding(“utf-8”); //设置服务器端的解码方式
String name =request.getParameter(“name”);
response.getWriter().print(“张”);
- JavaWeb编码和乱码解决方法
- javaWeb中文乱码 解决方法
- JavaWeb多种乱码解决方法
- javaWeb中文乱码 解决方法
- JavaWeb多种乱码解决方法
- javaWEB乱码根源于解决方法
- javaweb中中文乱码解决方法总结之response和request解决方法
- J2EE-JavaWeb项目的编码乱码问题
- javaweb中文字符编码乱码问题
- JavaWeb的各种中文乱码终极解决方法!!
- JavaWeb的各种中文乱码终极解决方法
- JavaWeb的各种中文乱码解决方法
- JavaWeb的各种中文乱码解决方法
- JavaWeb的各种中文乱码解决方法
- JavaWeb的各种中文乱码终极解决方法 .
- JavaWeb的各种中文乱码终极解决方法!!
- JavaWeb的各种中文乱码终极解决方法
- JavaWeb的各种中文乱码终极解决方法
- oracle总结8
- oracle database link小结
- 邮票分你一半
- storm源代码之tuple是如何发送的
- sdut 5-3 多级派生类的构造函数
- JavaWeb编码和乱码解决方法
- select函数实现无阻塞的连接、接收、输入发送
- 新做了几个网站,欢迎光顾
- JavaWeb:Tomcat下配置数据源(JNDI)连接数据库
- SQL Server 清除用户名和密码
- java ,String分割字符串
- uname -r
- VS2010 在编译一个驱动时出现无法解析的外部符号 的解决方法
- 穷举