关于linux:如何将文件从ASCII转换为UTF-8?

How to convert a file from ASCII to UTF-8?

我正在尝试将一堆A文件从ASCII转换成UTF-8。

为此,我尝试使用iconv

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

-f ENCODING输入的编码

-t ENCODING输出的编码

但那个文件没有转换成UTF-8。这是一个.dat文件。

在发布这篇文章之前,我搜索了谷歌并找到了如下信息:

ASCII is a subset of UTF-8, so all ASCII files are already UTF-8 encoded. The bytes in the ASCII file and the bytes that would result from"encoding it to UTF-8" would be exactly the same bytes. There's no difference between them.

强制从US-ASCII编码到UTF-8(ICONV)

在字符集之间转换文本文件的最佳方法?

但是上面的链接没有帮助。

尽管它是ASCII格式的,但它将支持UTF-8,因为UTF-8是一个超级集,从我这里接收文件的另一方需要文件编码为UTF-8。他只需要UTF-8格式的文件。

有什么建议吗?


我对这个问题有点困惑,因为正如您所指出的,ASCII是UTF-8的一个子集,所以所有的ASCII文件都已经是UTF-8编码的。

如果您正在向另一方发送只包含ASCII字符的文件,但另一方抱怨它们不是"UTF-8编码的",那么我猜它们是指ASCII文件没有明确指示内容是UTF-8的字节顺序标记这一事实。

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

ICONV:使用BOM从Windows ANSI转换为UTF-8

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

在RAM对使用"file"命令查找类型的另一方作出评论后,编辑以添加以下实验

1
2
3
4
5
6
7
8
9
10
11
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