问题表现:
表格那么含有名称列,名称一旦包含 “_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();