中文乱码问题

处理从页面获取的中文乱码

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值