csv导入乱码,csv文件乱码的解决方法

  csv导入乱码,csv文件乱码的解决方法

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

  1.问题

  当查询的数据导出为xls文件(UTF-8编码)时,数据正常;但是,导出CSV文件时,文件中的中文字符也采用UTF-8编码。用GBK编码导出时,汉字正常显示。

  为了解决这个问题,以后导出包含拉丁字符(如)的数据时,xls文件导出的数据会正常显示,CSV文件导出时,文件中的拉丁字符会显示为“?”号码

  尝试换成其他编码方式失败,在网上找到了解决这个问题的方法。

  2.解决办法

  默认情况下,CSV导出的文件不包含BOM表信息。这个问题可以通过为要导出的内容设置BOM标识(以EF BB BF开头的字节流)来解决。具体方法如下:(推荐:java视频教程)

  .

  output streamwriter output streamwriter=new output streamwriter(response . get output stream(), UTF-8 );

  //输出什么

  RESULT=(String)content map . get(RESPONSE _ RESULT);

  response . set header( Content-Disposition ,附件;filename=test . CSV );

  output streamwriter . write(new String(new byte[]{(byte)0x ef,(byte)0xBB,(byte)0x BF });

  outputStreamWriter.write(结果);

  output streamwriter . flush();如果它被实现为OutputStream流,则参数可以修改如下:

  out=response . get output stream();

  //添加UTF-8文件的标识字符

  out.write(new byte []{(byte)0xEF,(byte)0xBB,(byte)0x BF });注意:

  BOM:字节序标志,字节序标志(以下摘自百度百科)

  在UCS代码中,有一个字符叫做“零宽度无间断空格”,中文翻译为“零宽度无间断间隔”,其代码为FEFF。FFFE是UCS中不存在的角色,所以实际传输中应该不会出现。

  UCS规范建议我们在传输字节流之前传输字符“零宽度无间断空格”。这样,如果接收方收到FEFF,就表明这个字节流是Big-Endian;如果收到FFFE,意味着这个字节流属于Little- Endian。所以字符“零宽度不换行空格”也叫BOM。

  UTF-8不需要BOM来表示字节顺序,但是可以用BOM来表示编码方式。字符“零宽度不间断空格”的UTF-8编码是EF BB BF。因此,如果接收器接收到以EF BB BF开始的字节流,它知道这是UTF-8编码。Windows使用BOM来标记文本文件的编码方式。

  更多java知识,请关注java基础课程专栏。这就是java导出csv乱码的解决方案的细节。更多请关注我们的其他相关文章!

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

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