`
s_xy
  • 浏览: 19233 次
社区版块
存档分类
最新评论
阅读更多

今天在做导出操作时发现保存excel名称为乱码,经查找发现时jsp页面编码有问题:

jsp导出页面部分代码:

name= user.getName() + "工资单.xls";
 response.setHeader("Content-Disposition", "filename=" + new String(name.getBytes("gbk"),"ISO-8859-1"));

修改为以下代码则正常:

name= user.getName() +  new String(("工资单.xls").getBytes("ISO-8859-1"),"gbk");
 response.setHeader("Content-Disposition", "filename=" + new String(name.getBytes("gbk"),"ISO-8859-1"));

 

new String(str.getBytes(“ISO-8859-1″),”GBK”)的原理:

 

当字符在网络中传递时,不管对于这个字符是怎么编码的,java都认为它是iso8859编码,因此按照iso8859到unicode的转换规则,变成java保存字符的unicode编码,此时如果直接显示该字符时,将出现乱码,因为它本身并不是iso8859的编码,而是GBK方式,对应unicode码自然也不正确,所以这时需要做的是先将这个字符码可逆的转化为原先的编码值即GBK值,(转化方法就是通过getBytes(ISO-8859-1)得到),然后java才将此GBk值的字符,以gbk到unicode的转化规则保存为java默认方式unicode码。


那么我们可以得到一个编码转换的过程
假设:GBK码(“你”)->URLencode后变成->(%3F%2F)->Tomcat自动替你转一次ISO- 8859-1->得到( 23 43 68 23 42 68 每一个符号表示为ISO-8859-1中的一个编码)->接收页面—>再转一次为ISO-8859-1的Byte数组 [23,43,68,23,42,68]—>用GBK再转为可读的文字—>(%3F%2F”—->转为(“你”)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics