使用变音符号导出CSV会导致输出中出现奇怪的字符

时间:2014-02-07 22:34:09

标签: linux windows scala csv

我在Scala / Spray中导出csv,它在我的 Windows 计算机上运行良好,但在 Linux 计算机上运行失败。

两个操作系统的响应完全相同:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With, Cache-Control, Pragma, Origin, Authorization, Content-Type, Auth-Token
Access-Control-Allow-Methods:GET, POST, DELETE, OPTIONS, PUT
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:Auth-Token
Content-Disposition:attachment; filename=Enter report title.csv
Content-Length:229
Content-Type:text/csv; charset=ISO-8859-1
Date:Fri, 07 Feb 2014 22:17:40 GMT
Server:spray-can/1.2.0

我想知道为什么操作系统可以有所作为?

在部署jar之后从linux导出时,变音符会被奇怪的字符替换。

例如,从Windows导出时Café macchiato 可以正常,但从Linux导出时看起来像Café macchiato

2 个答案:

答案 0 :(得分:0)

请永远不要将Excel用于面向文本的文件。它弄乱了东西。使用像vim或Notepad ++这样的编辑器,你可以检查字节并实际查看你的东西是否正确。

答案 1 :(得分:0)

为了帮助Excel识别字符编码,您可以在文件的开头添加BOM。例如:

def prepareBomOutputStream(outputFile: String) = {
  val os = new FileOutputStream(outputFile)
  os.write(239)
  os.write(187)
  os.write(191)
  os
}

您还可以检查在两种情况下是否获得完全相同的编码而不是编码的子集。例如,在Windows上,您可能会获得ISO-8859-15。您最有可能在CSV导出代码/库中明确设置编码。要在Linux上检查编码,您可以使用:

$ file -ib /tmp/test.csv 
text/plain; charset=utf-8

甚至像hexdump