为什么使用 iconv 时该文件没有转换为 UTF-8?

为什么使用 iconv 时该文件没有转换为 UTF-8?

Versions: Linux 2.6;重击 4.1.2;图标2.12

ISO 转换没有返回错误,但转换后的文件仍然显示为US-ASCII

问题 如何转码foobar.txt为 UTF-8?

$> file -bi foobar.txt
   text/plain; charset=us-ascii

$> iconv -f US-ASCII -t UTF-8 foobar.txt >  foobar_utf8.txt
iconv: illegal input sequence at position 573167

$>iconv -f ISO-8859-1 -t UTF-8 foobar.txt >  foobar_utf8.txt
$>
$> file foobar_utf8.txt
   foobar_utf8.txt: ASCII text

答案1

ASCII 始终是正确的 UTF-8,因此不需要转换 — 如果它曾是ASCII。

file实用程序不会查看整个文件,而只会查看开头。如果它足够大,则file可以忽略非 ASCII 字节。 573167可能已经过了任何file可能考虑的“开始”。

另一方面,你只能使用iconv转换已知的字符集为UTF-8。您可以尝试一些可能的选择,检查是否成功 - 并比较生成的文件。

例如,如果该文件是 ISO-8859-x 风格之一,则您必须通过检查生成的文件来衡量是否成功。由于iconv仅在 573167 字节之后抱怨该文件,因此您可能会考虑使用cut从该字符偏移量开始提取文件的一部分,并尝试file识别它。

相关内容