excel导出来乱码,java下载excel文件名乱码

  excel导出来乱码,java下载excel文件名乱码

  如何解决写爬虫IP受阻的问题?立即使用。

  导出java的错误方法和正确方法:(推荐:java视频教程)

  错误的方式:

  response . set header( Content-Disposition , inlinefilename= new String(filename . getbytes(), utf-8 );

  string fileName=aicasenodedeptservice . get fileName(request)。xlsx ;

  response . setcharacterencoding(“UTF-8”);

  response . set content type( application/ms-excel );

  正确的方式:

  response . set header(" Content-Disposition ",

  内嵌;文件名=

  新字符串(fileName.getBytes(utf-8 ), iso 8859-1 );原因:httpheader要求其内容必须以iso8859-1编码。这些字符传到目的地后,目的地程序会通过相反的方式得到正确的汉字中:strings _ utf8=new string(s _ ISO8591 . getbytes( ISO8859-1 , UTF-8 ),这样一来

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

  String.getBytes(Stringdecode)方法将返回指定解码代码下字符串的字节数组表示,例如:

  byte[] b_gbk=中的GetBytes( GBK );

  byte[] b_utf8=中的GetBytes( UTF-8 );

  Byte[] b_iso88591= middle 。getBytes( ISO8859-1 );将分别返回、8和中的中文字符“中”的字节数组表示形式。此时此刻

  b_gbk的长度是2,

  b_utf8的长度是3,

  b_iso88591的长度为1。

  与getBytes相反,这个“中文”字可以通过新字符串(byte[],decode)来恢复。

  这个新的字符串(byte[],decode)实际上使用指定的代码decode将byte[]解析成一个字符串。

  String s_gbk=new String(b_gbk, GBK );

  String s_utf8=新字符串(b_utf8, UTF-8 );

  String s_iso88591=新字符串(b_iso88591, ISO8859-1 );通过输出s_gbk、s_utf8和s_iso88591,会发现s_gbk和s_utf8都是‘中’,而只有S _ ISO8591是无法识别的字符(可以理解为乱码)。为什么使用ISO8859-1编码合并后‘中’字不能恢复?原因很简单,因为编码的码表根本不含汉字,当然过不了‘中’。getBytes( ISO8859-1 );以获得“中文”字符在ISO8859-1的正确编码值,因此不可能通过newString()来恢复它。

  所以在用String.getBytes(Stringdecode)方法获取byte[]时,一定要确保String表示的代码值确实存在于decode的编码表中,这样才能正确还原byte[]数组。

  注意:

  有时,为了使汉字适应一些特殊的要求(例如httpheader要求其内容必须采用iso8859-1编码),汉字可能会按字节编码,例如:

  String s_iso88591=newString(。getbytes (UTF-8 ), ISO859-1 ),这样得到的s_iso8859-1字符串实际上是ISO859-1的三个字符。在这些字符被传递到目的地之后,目的地程序以相反的方式对它们进行字符串化。

  更多java知识,请关注java基础课程专栏。以上是java导出excel乱码的原因及解决方法的详细介绍。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: