iconv unicode未知输入格式

RRZ*_*ope 8 unix encoding utf-8

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

$file xxx.csv 
xxx.csv: UTF-8 Unicode text, with very long lines
Run Code Online (Sandbox Code Playgroud)

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

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

$iconv -f UTF-8 -t ISO-8859-1 xxx.csv > yyy.csv
iconv: illegal input sequence at position 1234
Run Code Online (Sandbox Code Playgroud)

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

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

nie*_*nen 14

只有当您的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
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我猜近似是最好的解决方案,例如将重音字符映射到他们的无中心对应物,将欧元符号映射到EUR等等......


RRZ*_*ope 5

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

在尝试进行转换时,我找到了适合我的解决方案:

iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT --output=outfile.csv inputfile.csv
Run Code Online (Sandbox Code Playgroud)

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

为了实现SQLServer的兼容性,将UTF-8转换为UTF-16的效果会更好……只是文件大小会增长很多