处理从页面获取的中文乱码
1.post请求:
request.setCharacterEncoding("utf-8");
2.get请求:
//获取下载文件的文件名
String fileName = request.getParameter("fileName");
//进行判断
if(fileName !=null && "".equals(fileName)){
//修改编码
fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
}
使用url地址栏下载导致的各个浏览器加粗样式中文编码不同
//由于各个浏览的编码规则不同,所以需要先对浏览器进行判断
//1.获取浏览器厂商头信息
String agent = request.getHeader("user-agent");
//2.Firefox浏览器中包含Firefox字样,可以进行判断
if(agent.contains("Firefox")){
fileName2=FireFoxEncoding.base64EncodeFileName("文件名");
//FireFoxEncoding.base64EncodeFileName()这个类中的方法是需要自己创建,专门用于处理Firefox浏览器编码问题
}else{
fileName2=URLEncoder.encode(fileName,"utf-8");//该代码适用于谷歌浏览器和ie浏览器
}
在util(工具包)下创建FireFoxEncoding类,然后在FireFoxEncoding类创建base64EncodeFileName(),方便的使用
// 解决火狐浏览器的url地址传输中文问题专用方法
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();// 类 JDK 提供的
//
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
## Excel表格内容乱码
原因:httpheader要求其内容必须为iso8859-1编码,在将这些字符传递到目的地后,目的地程序再通过相反的方式Strings_utf8 = newString(s_iso88591.getBytes(“ISO8859-1”),“UTF-8”)来得到正确的中文汉字"中",这样就既保证了遵守协议规定、也支持中文。
示例:
//由于这是在url地址下载的,如果下载的文件名中包含中文的话会导致编码问题 每一个浏览器的编码规则有可能不一样所以需要设置提交设置一下下载文件的文件名
String fileName = "导出数据.xls";
String fileName2 = fileName;
String agent = request.getHeader("user-agent"); //获取浏览器厂商头信息
if(agent.contains("Firefox")){ //Firefox浏览器中包含Firefox字样
fileName2=FireFoxEncoding.base64EncodeFileName(fileName);
}else{
//其他浏览器
fileName2=URLEncoder.encode(fileName,"utf-8");
}
//设置两个头 一个流
//1.设置文件名称的METE值的类型,通过SerevletContext来获取
response.setContentType("application/vnd.ms-excel");
//2.设置content-dispostion
//response.setHeader("Content-Disposition", "attachment;fileName="+fileName2);
response.setHeader("Content-Disposition",
"inline;filename="+
new String(fileName2.getBytes("utf-8"),"iso8859-1"));
spring处理中文前端传参乱码问题:
get
可以按照上面的转换格式的方式,但是这样需要每一个参数都需要修改,所以我们可以采用另外一种方式,修改Tomcat编码:
在Tomcat中修改编码:
将原来的
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
换成:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
这样就ok了
post
在web.xml中文件中添加配置:
<!--配置spring的过滤器-->
<filter>
<filter-name>spring filter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>spring filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>