【问题标题】:Problem with accents when generating csv file in Grails在 Grails 中生成 csv 文件时出现重音的问题
【发布时间】:2011-06-08 13:14:36
【问题描述】:

在这个 Grails 应用程序中,我使用代码将数据库寄存器导出到 csv 文件:

response.setHeader "Content-disposition", "attachment; filename=creds.csv"
response.contentType = 'text/csv; charset=UTF-8'
response.setCharacterEncoding("UTF-8")
response.outputStream << respstr
response.outputStream.flush()

浏览器下载的文件有重音问题。

我可以告诉数据库中的数据是好的,因为我还使用 apache.poi.* 实现了 xls 文件的生成,并且重音显示得很好。

psql -l 返回:

Name     |  Owner   | Encoding  | Collation | Ctype |
mydb     | postgres | SQL_ASCII | C         | C     |

我应该改变什么才能让它工作?谢谢

【问题讨论】:

  • 我认为这是一个问题的完全重复:stackoverflow.com/questions/4784810/…
  • 在导入时尝试设置 UTF-8 但没有成功。
  • 抱歉,设置什么,BOM?你能找出结果文件的实际编码是什么吗?如果它是正确的 UTF-8,那么问题出在 Excel 方面。如果不是,那么这是一个数据库排序问题,并且您的 Web UI 中也一定看不到变音符号/重音符号 - 是吗?毕竟respstr 来自哪里?

标签: grails csv export diacritics


【解决方案1】:

解决方案: 可以通过在下载的 CSV 文件中添加附加标头(BOM,字节顺序掩码)来解决。

response.setContentType("application/vnd.ms-excel:UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=myOutputFile.csv");

// Excel does not recongize the UTF-8, add additional header (BOM) for excel
OutputStream outputStream = response.getOutputStream();
outputStream.write(0xEF);  
outputStream.write(0xBB);
outputStream.write(0xBF);   

来源:http://yp-javadev.blogspot.com/2012/04/resolved-download-csv-with-utf-8.html

【讨论】:

    【解决方案2】:

    如果是损坏的数据库排序规则,那么我建议您在数据库级别修复它 - 将编码/排序规则转换为 UTF-8。

    如果不行,你可以试试:

    【讨论】:

    • 感谢您的回复,实际上在 UI 和使用 apache 工具导出的 xls 文件中有重音符号。 respstr 只是一个字符串。
    • 那么生成的文件是什么编码的?
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多