• 技术文章 >Java >Java基础

    java导出excel乱码原因及解决方法

    尚2019-12-10 17:07:56原创4885

    java导出错误方式与正确方法:(推荐:java视频教程

    错误方式:
    response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"utf-8"));
    String fileName =    aicaseNodeDeptService.getFilename(request)+".xlsx";
     
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/ms-excel");
    正确的方式:
    response.setHeader("Content-Disposition",
            "inline;filename="+
                    new String(fileName.getBytes("utf-8"),"iso8859-1"));

    原因:httpheader要求其内容必须为iso8859-1编码,在将这些字符传递到目的地后,目的地程序再通过相反的方式Strings_utf8 = newString(s_iso88591.getBytes("ISO8859-1"),"UTF-8")来得到正确的中文汉字"中",这样就既保证了遵守协议规定、也支持中文。

    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这表示在不同的操作系统下,返回的东西不一样!

    String.getBytes(Stringdecode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:

    byte[] b_gbk = "中".getBytes("GBK");
    byte[] b_utf8 = "中".getBytes("UTF-8");
    byte[] b_iso88591 = "中".getBytes("ISO8859-1");

    将分别返回"中"这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时

    b_gbk的长度为2,

    b_utf8的长度为3,

    b_iso88591的长度为1。

    而与getBytes相对的,可以通过new String(byte[], decode)的方式来还原这个"中"字,

    这个new String(byte[],decode)实际是使用指定的编码decode来将byte[]解析成字符串.

    String s_gbk = new String(b_gbk,"GBK");
    String s_utf8 = new String(b_utf8,"UTF-8");
    String s_iso88591 = new String(b_iso88591,"ISO8859-1");

    通过输出s_gbk、s_utf8和s_iso88591,会发现s_gbk和s_utf8都是"中",而只有s_iso88591是一个不被识别的字符(可以理解为乱码),为什么使用ISO8859-1编码再组合之后,无法还原"中"字?原因很简单,因为ISO8859-1编码的编码表根本就不包含汉字字符,当然也就无法通过"中".getBytes("ISO8859-1");来得到正确的"中"字在ISO8859-1中的编码值了,所以,再通过newString()来还原就更是无从谈起。

    因此,通过String.getBytes(Stringdecode)方法来得到byte[]时,一定要确定decode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原。

    注意:

    有时候,为了让中文字符适应某些特殊要求(如httpheader要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如:

    String s_iso88591 = newString("中".getBytes("UTF-8"),"ISO8859-1"),这样得到的s_iso8859-1字符串实际是三个在ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式Strings_utf8 = newString(s_iso88591.getBytes("ISO8859-

    更多java知识请关注java基础教程栏目。

    以上就是java导出excel乱码原因及解决方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java
    上一篇:java判断变量是否为数字的方法介绍 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 深入理解java中反射机制(含数组参数)• java文件读取中文乱码的原因与解决方法• java判断字符串是否日期的方法• 关于java中出现问号乱码问题的总结
    1/1

    PHP中文网