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
识别它。