首页 新闻 搜索 专区 学院

Springboot导出的Excel表格内容存在乱码。

0
悬赏园豆:15 [待解决问题]

问题表现:

表格那么含有名称列,名称一旦包含 “_x3850” ,最终到处的Excel表格中显示的名称就会包含乱码。比如名称为:“system_x3850_xo” 最终“_x3850”处显示的是乱码。

基本定为出是什么了,不过暂时还是没找到能够友好解决问题对方式。
问题原因:
pio 本身会对字符串对值进行封装成RIchTextString富文本类,而在插入数据对时候富文本类
会对原字符串中符合 ‘x([0-9AF]{4})’ 规则对字符串进行编码转换,最终生成一些特殊符号,
而导出对文件呈现乱码估计是由于本地字体库不支持这种符号编码导致的吧。

虽然问题基本是定位了,但是没有找到能有什么方式令用户无感知对问题进行解决。
当前只想到了两种方式:
一是新版本中对需要导出对字符串字段加上新的校验,但是没办法解决老版本中含对可能导致异常对值。
二是导出时,在赋值前对字符串进行判断,如果有符合规则的字符串就对这部分字符对‘x’进行大写转换,从而规避富文本转码这一步操作。 但是导出的数据和库数据是不一致对,显得不友好。

想问一下,有没有什么方式能很好地关闭poi对这个编码功能?

导出涉及的代码大致如下:

       //生成excel,并将其打包到zip压缩包内生成目标压缩包 zipFile
       // ...........

       // 输出到客户端         
        OutputStream out =  response.getOutputStream();
        
        response.reset();
        
        response.setHeader("Content-Disposition", "attachment;filename=" + new 
          String("TestName".getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_88591));

        response.setContentType("application/octet-stream; charset=utf-8");
        
        response.setCharacterEncoding("UTF-8");

        out.write(FileUtils.readFileToByteArray(zipFile));

         out.flush();
         
         out.close();
JRay的主页 JRay | 初学一级 | 园豆:74
提问于:2020-06-23 17:11
< >
分享
所有回答(2)
0

试下看free spire.xls for java导出效果呢

MiaZhang | 园豆:212 (菜鸟二级) | 2020-06-24 09:27

出现问题的是公司的一个老项目,涉及的方面比较广。如果替换工具包再实现代价有点大。
最好能在现有的实现基础上增加配置或者判断能解决。

支持(0) 反对(0) JRay | 园豆:74 (初学一级) | 2020-06-24 09:45

基本定为出是什么了,不过暂时还是没找到能够友好解决问题对方式。
问题原因:
pio 本身会对字符串对值进行封装成RIchTextString富文本类,而在插入数据对时候富文本类
会对原字符串中符合 ‘x([0-9AF]{4})’ 规则对字符串进行编码转换,最终生成一些特殊符号,
而导出对文件呈现乱码估计是由于本地字体库不支持这种符号编码导致的吧。

虽然问题基本是定位了,但是没有找到能有什么方式令用户无感知对问题进行解决。
当前只想到了两种方式:
一是新版本中对需要导出对字符串字段加上新的校验,但是没办法解决老版本中含对可能导致异常对值。
二是导出时,在赋值前对字符串进行判断,如果有符合规则的字符串就对这部分字符对‘x’进行大写转换,从而规避富文本转码这一步操作。 但是导出的数据和库数据是不一致对,显得不友好。

支持(0) 反对(0) JRay | 园豆:74 (初学一级) | 2020-07-02 17:24
0

先看乱码文件 改下字符集 能否恢复正常
找到具体原因后 再改代码

ycyzharry | 园豆:20846 (高人七级) | 2020-06-24 23:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册