csv - 使用 ICsvListWriter 时,上标字符会导致生成的 CSV 文件中出现垃圾字符
问题描述
我正在尝试在 .csv 文件中写入上标字符。我正在使用write(List<?> columns)
org.supercsv.io.ICsvListWriter 的方法。在生成的 .csv 文件中,上标字符与前面的垃圾字符一起出现。
List columns = new ArrayList();
String myString = "abcd1";
columns.add(myString.replaceAll("1", "¹"));
csvWriter.write(columns);
在生成的 .csv 文件中,它是
abcd¹
我也尝试过使用 unicode,但它没有帮助。
columns.add(myString.replaceAll("1", "\u00B9"));
请问这里有什么建议吗?
解决方案
找到了解决这个问题的方法。创建 ICsvListWriter 对象时需要更正。以前我有这个代码,其中“响应”是 HttpServletResponse。
CsvPreference preference = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useEncoder(new DefaultCsvEncoder()).build();
ICsvListWriter csvWriter = new CsvListWriter(response.getWriter(), preference);
此代码对此进行了增强:
ServletOutputStream output = response.getOutputStream();
output.write(new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF });
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
CsvPreference preference = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useEncoder(new DefaultCsvEncoder()).build();
ICsvListWriter csvWriter = new CsvListWriter(writer, preference);
这解决了这个问题,所有上标字符现在都可以正确地出现在生成的 CSV 文件中,而没有任何垃圾字符。无论我使用实际的上标字符还是它们的 Unicode,此修复程序都有效。
推荐阅读
- python - 将 unicode 解析为 python 数据类型
- c++ - 目录迭代器值作为变量
- c# - 如何在 db 查询中隐藏 API 回复中的项目?
- php - 如何急切加载多个关系并按嵌套关系分组
- android - 在 Android 设备上使用 Angular 7 播放音频
- data-structures - 如果我们限制在任何一次遍历中使用 256 个桶,那么对整数数组进行排序需要多少次基数排序?
- d3.js - 如何修复多折线图中的显示问题。svg.append("path") 没有显示任何内容
- reactjs - 如何通过反应调用父事件的子方法?
- php - 如何通过 Laravel 中的 id 获取用户名?
- zeromq - 使用主要 domo 模式的 ZMQ 实现。是否可以在工作代理和代理客户端之间混合连接协议?