为什么iconv无法从utf-8转换为iso-8859-1

时间:2015-04-28 15:00:16

标签: linux utf-8 iso iconv suse

我的系统是SUSE Linux Enterprise Server 11。

我正在尝试将数据从utf-8格式转换为iso使用“iconv”

$>file test.utf8
test.utf8: UTF-8 Unicode text, with very long lines
$>
$>file -i test.utf8
test.utf8: text/plain charset=utf-8
$>
$>iconv -f UTF-8 -t ISO-8859-1 test.utf8 > test.iso

iconv: test.utf8:20:105: cannot convert
你可以帮我理解这个吗? 感谢。

3 个答案:

答案 0 :(得分:18)

您的输入文件包含拉丁文1中不存在的字符。您可以使用-c选项跳过它们:

iconv -c -futf8 -tl1 test.utf8 > test.iso

答案 1 :(得分:3)

有时最好同时使用-c和// TRANSLIT,例如

$ cat rodriguez
Rodrı́guez

$ file rodriguez
rodriguez: UTF-8 Unicode text

$ iconv  --unicode-subst="<U+%04X>" -f UTF-8 -t ISO-8859-1 rodriguez
Rodr<U+0131><U+0301>guez

$ iconv -f UTF-8 -t ISO-8859-1 rodriguez
Rodr
iconv: rodriguez:1:4: cannot convert

$ iconv -f UTF-8 -t ISO-8859-1//TRANSLIT rodriguez
Rodri
iconv: rodriguez:1:5: cannot convert

$ iconv -c -f UTF-8 -t ISO-8859-1 rodriguez
Rodrguez

$ iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT rodriguez
Rodriguez

答案 2 :(得分:1)

使用//TRANSLIT参数,将放置虚拟字符。

iconv -f UTF-8 -t ISO-8859-1//TRANSLIT test.utf8 > test.iso