如何将文件从ASCII转换为UTF-8?

时间:2015-02-07 08:41:53

标签: linux unix encoding utf-8 ascii

我正在尝试将一堆文件从ASCII转码为UTF-8。

为此,我尝试使用iconv

iconv -f US-ASCII -t UTF-8 infile > outfile

-f ENCODING输入的编码

-t ENCODING输出的编码

该文件仍未转换为UTF-8。它是一个.dat文件。

在发布此消息之前,我搜索了Google并找到了以下信息:

  

ASCII是UTF-8的子集,因此所有ASCII文件都已经过UTF-8编码。 ASCII文件中的字节和“将其编码为UTF-8”所产生的字节将完全相同。他们之间没有区别。

Force encode from US-ASCII to UTF-8 (iconv)

Best way to convert text files between character sets?

上述链接仍无济于事。

即使它是ASCII格式,它也支持UTF-8,因为UTF-8是一个超级集,另一方要接收我的文件需要文件编码为UTF-8。他只需要文件格式为UTF-8。

请提出任何建议。

1 个答案:

答案 0 :(得分:11)

我对这个问题感到有点困惑,因为正如你所说,ASCII是UTF-8的一个子集,因此所有的ASCII文件都已经过UTF-8编码了。

如果您要向另一方发送仅包含ASCII字符的文件,但另一方抱怨他们不是'UTF-8编码',那么我猜他们指的是他们指的是ASCII文件没有明确指示内容为UTF-8的字节顺序标记。

如果确实如此,那么您可以使用以下答案添加字节顺序标记:

iconv: Converting from Windows ANSI to UTF-8 with BOM

如果对方表示他不需要'BOM'(字节顺序标记),但仍抱怨文件不是UTF-8,那么另一种可能是你的初始文件实际上不是ASCII,而是而是包含使用ANSI或ISO-8859-1编码的字符。

编辑后添加以下实验,在Ram发表评论后,对方使用'file'命令寻找类型

Tims-MacBook-Pro:~ tjohns$ echo 'Stuff' > deleteme
Tims-MacBook-Pro:~ tjohns$ cat deleteme
Stuff
Tims-MacBook-Pro:~ tjohns$ file -I deleteme
deleteme: text/plain; charset=us-ascii
Tims-MacBook-Pro:~ tjohns$ echo -ne '\xEF\xBB\xBF' > deleteme
Tims-MacBook-Pro:~ tjohns$ echo 'Stuff' >> deleteme
Tims-MacBook-Pro:~ tjohns$ cat deleteme
Stuff
Tims-MacBook-Pro:~ tjohns$ file -I deleteme
deleteme: text/plain; charset=utf-8