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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。