在shell中将ANSI转换为UTF-8

17
我正在制作一个解析器(1个csv转成3个csv)脚本,但是我遇到了问题。因为我是法国人,我的语言中有像é è à ....这样的字母。
客户给我发送了一个csv文件,Linux将其识别为“未知的8位”(我猜是ansi格式)。
在我的脚本中,我要编写3个新的csv文件。但是ViM将它们创建为ISO Latin1格式,因为它接收到的输入与此最接近,但我的é,è,à...被破坏了。我需要UTF-8格式。
所以我尝试将第一个ANSI格式的csv文件转换为UTF-8:
iconv -f "windows-1252" -t "UTF-8" import.csv -o import.csv

问题是它破坏了我的CSV文件。现在只有一行。但我的特殊字符没问题。有没有一种方法可以将ANSI转换为UTF-8并保留我的行?

1个回答

39
把输出放到另一个文件中,不要覆盖旧文件。
iconv -f "windows-1252" -t "UTF-8" import.csv -o new_import.csv

iconv 在读写同一文件时会失败。


6
使用来自 moreutils 的 sponge 工具,以保持相同的文件名称,方法如下:iconv -f "windows-1252" -t "UTF-8" import.csv | sponge import.csv。该命令将导入的 CSV 文件从 windows-1252 编码转换为 UTF-8 编码,并使用 sponge 工具将结果写回原始文件,以避免输出到终端并手动将其重定向回输入文件。 - ndemou
我需要转换捷克字幕,所以我必须使用 CP1250 作为输入编码。 - To Kra
对我来说,以下命令是有效的:iconv -f "windows-1252" -t "UTF-8" import.csv > new_import.csv - Luis Tiago Flores Cristóvão

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接