iconv unicode未知输入格式

时间:2011-10-07 14:12:16

标签: unix encoding utf-8

我有一个在Unix下描述的文件:

$file xxx.csv 
xxx.csv: UTF-8 Unicode text, with very long lines

less / vi中查看它会使某些特殊字符(ßÄ°...)无法读取(├╝); Windows也不会显示它;将其直接导入数据库只会将特殊字符更改为其他特殊字符(+ä,+ñ,...)。

我想将它现在转换为带有iconv的“默认可读”编码。 当我尝试用iconv转换它时

$iconv -f UTF-8 -t ISO-8859-1 xxx.csv > yyy.csv
iconv: illegal input sequence at position 1234

使用UNICODE作为输入,UTF-8作为输出将返回相同的消息

我猜这个文件有些编码用另一种我不知道的格式 - 我怎样才能找出哪种格式才能将它转换成“普遍”可读的东西......

3 个答案:

答案 0 :(得分:11)

从UTF-8转换为ISO-8859-1只有在您的UTF-8文本只有可以用ISO-8859-1表示的字符时才有效。如果不是这种情况,您应该指定这些字符需要发生什么,忽略(// IGNORE)或近似(// TRANSLIT)它们。尝试以下两种方法之一:

iconv -f UTF-8 -t ISO-8859-1//IGNORE --output=outfile.csv inputfile.csv
iconv -f UTF-8 -t ISO-8859-1//TRANSLIT --output=outfile.csv inputfile.csv

在大多数情况下,我猜近似是最佳解决方案,例如对于他们的非同等对手的重音字符,欧元兑换欧元等等......

答案 1 :(得分:4)

问题是Windows无法将文件解释为UTF-8本身。它把它读作asci,然后ä成为2个字符的解释Ã(ascii 195 164)

尝试转换它,我找到了一个适合我的解决方案:

iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT --output=outfile.csv inputfile.csv

现在我可以在编辑器中正确查看特殊字符

对于SQLServer兼容性,将UTF-8转换为UTF-16会更好......只是文件大小增长了很多

答案 2 :(得分:1)

如果您不确定要处理的文件类型,可以按照以下方式找到它,

file file_name

上面的命令将为您提供文件格式。然后可以相应地使用 iconv 。 例如,如果文件格式为 UTF-16 ,并且您想将其转换为 UTF-8 ,则可以使用以下内容。

iconv -f UTF-16 -t UTF-8 file_name >output_file_name

希望这能让您更好地了解您的目标。