java开发中各种中文乱码问题解决策略
来源:互联网 发布:网络专供和专柜 编辑:程序博客网 时间:2024/06/05 21:13
一、request获取表单提交中文数据乱码问题的解决
post提交方式处理中文方法
通过post方式提交form表单时,首先会把数据放到request缓冲区里面,request缓冲区默认编码是 iso8859-1,这个编码不支持中文,所以解决这个问题的方法就是设置request缓冲区的编码,即
request.setCharacterEncoding("utf-8");
2、get提交方式处理中文方法
get提交方式有四种处理方案
- 修改tomcat的配置文件
* 找到tomcat({tomcat}\conf\server.xml)的server.xml,找到修改端口的地方,添加一个属性 URIEncoding=”utf-8”
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443“ URIEncoding="utf-8"/>
- 先对数据进行编码,再进行解码
String username="中国"; username = URLEncoder.encode(username, "utf-8"); System.out.println("URLEncoder="+username); username = URLDecoder.decode(username, "utf-8"); System.out.println("URLDecoder="+username);
- 使用string的构造完成编码(这个比较常用)
username = new String(username.getBytes("utf-8"),"utf-8");
- 直接在html的head中指定编码集(简单暴力)
<meta charset="utf-8">
二、response向页面输出中文乱码问题的解决
1)、 **使用字节流向页面输出中文** * 使用字节流向页面输出中文不一定会出现乱码问题,如果出现中文乱码问题,需要设置浏览器编码和设置字节数组的编码, 让这两个编码一样,不会有乱码问题
//设置浏览器的编码 response.setHeader("Content-Type", "text/html;charset=utf-8"); //设置字节数组的编码 response.getOutputStream().write("字节流中文输出".getBytes("utf-8"));
2、) 使用字符流向页面输出中文
* 使用字符流向页面输出中文一定会产生乱码
使用字符流输出中文,输出机制:首先把输入的内容放到response缓冲区里面,通过缓冲区向页面输出, 在response缓冲区里面有默认的编码 iso8859-1,该编码 不支持中文,设置response缓冲区,支持中文的编码,所以保持缓冲区和浏览器的编码一致就ok了。
//设置response缓冲区的编码 response.setCharacterEncoding("utf-8"); //设置浏览器的编码 response.setHeader("Content-Type", "text/html;charset=utf-8"); //使用字符流输出中文 response.getWriter().write("字符流中文");
上面可以简写一行代码:
response.setContentType("text/html;charset=utf-8");
*注意:字节流和字符流向页面输出数据,不能同时使用(互斥的)。 使用字符流不能直接向页面输出数字(因为默认走ASCII,比如response.getOutputStream().write(97); 的输出结果是字符 a)
三、下载文件时,中文文件名乱码问题的解决
由于不同的浏览器采用不同的编码方式,所以需要根据不同的浏览器进行不同的处理。IE采用url编码,火狐浏览器采用base64编码,所以我们首先要知道用户使用的是什么内核的浏览器,通过
request.getHeader("User-Agent");
可以从请求头里面获取到浏览器的类型,然后做以下操作
//判断不同的浏览器,使用头User-Agent String agent = request.getHeader("User-Agent"); //如果是火狐浏览器 if(agent.contains("Firefox")) { //火狐采用base64编码 filename = "=?UTF-8?B?"+ new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?="; } else { //ie浏览器使用url编码 filename = URLEncoder.encode(filename, "utf-8"); }
注意:文件下载需要设置以下头信息,无论文件是什么格式,都以下载的方式打开,而不会在浏览器里面直接显示出来
response.setHeader("Content-Disposition", "attachment;filename="+filename);
总结
个人认为,框架很好用,基础很重要。
阅读全文
0 0
- java开发中各种中文乱码问题解决策略
- java web 开发中中文乱码问题解决
- java中文乱码问题解决
- JSP中的各种中文乱码问题解决方案
- JAVAWEB开发过程中中文乱码问题解决方案
- 关于jFinal开发中遇到的中文乱码问题解决办法
- .net中中文乱码问题解决
- Cookies中中文乱码问题解决
- Java中文乱码问题解决心得
- Java/JSP中文乱码问题解决
- Java/JSP中文乱码问题解决
- java中的中文乱码问题解决!
- java+mysql 中文乱码问题解决
- FLEX+JAVA,FLEX中显示中文出现乱码问题解决办法
- java向mysql数据库中插入中文乱码问题解决
- Java中socket传送中文乱码问题解决方法
- PHP中中Ajax中文乱码问题解决
- Web开发中乱码问题解决
- Java IO
- 阅读优秀代码是提高开发人员修为的一种捷径
- &&和&的区别
- angularjs购物车,排序,筛选,全选,删除,确认是否删除
- Apache下开启SSI配置,使html支持include包含
- java开发中各种中文乱码问题解决策略
- onos中的intent
- STM32F ADC 多通道 非DMA
- 封装pdo类
- 高德地图(三) Marker 设置网络图片
- Maven关于编码GBK的不可映射字符的问题
- virtualbox中centos系统配置nat+host only上网
- 怎么恢复回收站清空的文件,快速找回回收站文件方法
- Spark内核源码深度剖析:sparkContext初始化的源码核心