Unicode
無需任何命令即可將純文字文件從 ASCII 轉換為 Unicode
為什麼 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:~$
萬一您無法讀取第二個
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:~$
我認為您混淆了“編碼”和“字元集”。
在第一種情況下,該文件僅包含在 US-ASCII 中找到的字元。這意味著無論您使用什麼語言設置來顯示文件,文件看起來都一樣。
在第二種情況下,該文件現在包含屬於 UTF8 字元集的字元,因為這就是您放入其中的內容。
這裡沒有發生轉換;該命令只是告訴您文件的內容是什麼。
該
file
命令只是猜測您要分析的文件中的內容。它通過從文件頭讀取一定數量的字節來進行分析,有時是在一個多步驟過程中(如果它在開頭找到一些清晰的標記)。在非結構化文本文件中,它讀取的字元數肯定會多於您的擴展字元數./file
,因此它會分析所有字元。在您的第二個範例中,您將一些 utf-8 字元放入一個文件中,並在此基礎上使用字元集
file
結束該文件。utf-8
如果您有例如只有 ASCII 字元的 900Kb 文件並附加您的“utf-8”回顯行,file
仍會將其報告為 ascii 編碼文件,因為它沒有讀取到 utf-8 編碼字元。門檻值接近 100Kb