在这个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 |
我应该更改什么才能使其正常工作?感谢
答案 0 :(得分:2)
解决方案: 可以通过向下载的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
答案 1 :(得分:0)
如果这是一个破坏的DB协作,那么我建议你在数据库级别修复它 - 将编码/整理转换为UTF-8。
如果不可能,您可以尝试:
charSet
parameter添加到JDBC URL; String
s by hand:使用
new String(recordSet.getBytes(1), "UTF-8" /* or whatever encoding is there */)
而不是recordSet.getString(1)
。