无需任何命令即可将纯文本文件从 ASCII 转换为 Unicode

use*_*971 1 ascii unicode conversion

为什么将 ASCII 编码的文件扩展为 UTF-8 或反向缩减为 ASCII?

user:~$ echo 'A  B  C  |  }  ~' > ./file 
user:~$ 
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$ 
user:~$ 
user:~$ echo '?  ?  ?      ' >> ./file 
user:~$ 
user:~$ file --brief --mime ./file 
text/plain; charset=utf-8
user:~$
user:~$  
user:~$ cat ./file 
A  B  C  |  }  ~
?  ?  ?      
user:~$ 
user:~$ 
user:~$ sed -i '$d' ./file 
user:~$ 
user:~$ cat ./file 
A  B  C  |  }  ~
user:~$
user:~$ file --brief --mime ./file 
text/plain; charset=us-ascii
user:~$
Run Code Online (Sandbox Code Playgroud)

如果您无法读取第二个echo语句中的字符:从第一个到最后一个:U+1D01, ?; U+266B, ?; U+2F0C, ?; U+1D411, ; U+1F035, ; U+1F200, .

区域设置是:

user:~$ echo $LANG
en_US.UTF-8
user:~$ echo $LANGUAGE
en_US:en
user:~$ echo $LC_COLLATE

user:~$ echo $LC_CTYPE

user:~$ echo $SHELL
/bin/bash
user:~$ echo $SHELL
/bin/bash
user:~$ 
user:~$ ps -p $$
  PID TTY          TIME CMD
 7537 pts/6    00:00:00 bash
user:~$ 
Run Code Online (Sandbox Code Playgroud)

Jen*_*y D 7

我认为您混淆了“编码”和“字符集”。

在第一种情况下,文件仅包含在 US-ASCII 中找到的字符。这意味着无论您使用何种语言设置来显示该文件,该文件看起来都相同。

在第二种情况下,文件现在包含属于 UTF8 字符集的字符,因为这是您放入其中的内容。

这里没有发生转换;该命令只是告诉您文件的内容是什么。