Locale
為什麼使用問號顯示非 ASCII 字元?
我正在開發基於 Yocto Morty 的嵌入式 linux 發行版。
我使用 Ubuntu 發行版創建了以下兩個文件:
- fòò.dàt
- 條形數據
我已將文件儲存到 pendrive 並將 pendrive 連接到我的嵌入式系統。
我使用 PuTTY 通過串口連接到嵌入式系統並瀏覽 pendrive 的內容。文件列表如下:
root@imx6qsabresd:/media/linux_desktop# ls -la total 8 drwxr-xr-x 2 root root 4096 Mar 17 2017 . drwxr-xr-x 9 root root 4096 Jan 1 1970 .. -rwxr-xr-x 1 root root 0 Mar 17 2017 b?r.d?t -rwxr-xr-x 1 root root 0 Mar 17 2017 f??.d?t
Ubuntu 發行版的語言環境是:
user@user-VirtualBox:~$ locale LANG=en_US.UTF-8 LANGUAGE=en_US LC_CTYPE="en_US.UTF-8" LC_NUMERIC=it_IT.UTF-8 LC_TIME=it_IT.UTF-8 LC_COLLATE="en_US.UTF-8" LC_MONETARY=it_IT.UTF-8 LC_MESSAGES="en_US.UTF-8" LC_PAPER=it_IT.UTF-8 LC_NAME=it_IT.UTF-8 LC_ADDRESS=it_IT.UTF-8 LC_TELEPHONE=it_IT.UTF-8 LC_MEASUREMENT=it_IT.UTF-8 LC_IDENTIFICATION=it_IT.UTF-8 LC_ALL=
嵌入式發行版的語言環境是:
root@imx6qsabresd:/media/linux_desktop# locale LANG=en_US LC_CTYPE="en_US" LC_NUMERIC="en_US" LC_TIME="en_US" LC_COLLATE="en_US" LC_MONETARY="en_US" LC_MESSAGES="en_US" LC_PAPER="en_US" LC_NAME="en_US" LC_ADDRESS="en_US" LC_TELEPHONE="en_US" LC_MEASUREMENT="en_US" LC_IDENTIFICATION="en_US" LC_ALL=en_US
即使沒有明確 .UTF-8 後綴,我也假設嵌入式系統語言環境是 UTF-8,因為:
root@imx6qsabresd:/media/linux_desktop# locale charmap UTF-8
請參閱此處:https ://stackoverflow.com/a/42797421/5321161了解更多詳情。
在我目前在嵌入式發行版中安裝的語言環境列表下方:
root@imx6qsabresd:/media/linux_desktop# locale -a C de_DE en_GB en_GB.ISO-8859-1 en_US en_US.ISO-8859-1 fr_FR POSIX zh_CN
PuTTY 終端仿真器配置為使用 UTF-8 作為遠端字元集。
為什麼重音字元被問號代替?
該問題是由筆式驅動器的安裝引起的。我通常在不指定任何選項的情況下安裝設備。例如
mount /dev/sdb1 /media
結果是:
/dev/sdb1 on /media type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
如此處所述:https ://linux.die.net/man/8/mount 預設 iocharset 選項為:iso8859-1。
我嘗試安裝指定選項 iocharset=utf8 的pendrive,這解決了問題:
mount -o iocharset=utf8 /dev/sdb1 /media
請參閱控制台中正確顯示的以下 UTF-8 字元:
root@imx6qsabresd:/media/win/mix# ls -la total 28 drwxr-xr-x 7 root root 4096 Mar 13 15:19 . drwxr-xr-x 9 root root 4096 Mar 16 2017 .. drwxr-xr-x 2 root root 4096 Mar 13 15:13 Île-de-France -rwxr-xr-x 1 root root 0 Mar 13 15:13 Île-de-France.txt drwxr-xr-x 2 root root 4096 Mar 13 15:14 madrileños -rwxr-xr-x 1 root root 0 Mar 13 15:15 madrileños.txt drwxr-xr-x 2 root root 4096 Mar 13 14:58 mà_però -rwxr-xr-x 1 root root 0 Mar 13 14:57 mà_però.txt drwxr-xr-x 2 root root 4096 Mar 13 15:12 Märkisch-Oderland -rwxr-xr-x 1 root root 0 Mar 13 15:13 Märkisch-Oderland.txt drwxr-xr-x 2 root root 4096 Mar 13 15:08 أبو ظبي -rwxr-xr-x 1 root root 0 Mar 13 15:09 أبو ظبي.txt