Linux
我可以在執行時確定可用的 NLS 字元集嗎?
我可以在
/proc/filesystems
.除了嘗試掛載文件系統之外,有沒有辦法確定我可以將哪些字元集與
mount
optionsiocharset
或一起使用?nls
理想情況下,我想要一個 Bash 數組中的列表,這樣我就可以用它來完成命令。
NLS 字元集作為模組提供,名稱以
nls_
. 要確定支持的字元集,您可以:
- 在以下位置查找內置字元集
/lib/modules/$(uname -r)/modules.builtin
:grep kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin
- 列出可用的模組
/lib/modules/$(uname -r)/kernel/fs/nls
:echo /lib/modules/$(uname -r)/kernel/fs/nls/nls_*
要獲得可用列表,我們需要從模組文件路徑中提取字元集名稱:
#!/bin/bash charsets=($(grep ^kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin) /lib/modules/$(uname -r)/kernel/fs/nls/nls_*) charsets=("${charsets[@]##*/nls_}"); charsets=("${charsets[@]%.ko}")
nls_base.ko
如果我們排除(不實現實際編碼),這將產生一個適合命令完成的列表:$ compgen -W "${charsets[*]}" -X base -- ascii cp1250 cp1251 cp1255 cp437 cp737 cp775 cp850 cp852 cp855 cp857 cp860 cp861 cp862 cp863 cp864 cp865 cp866 cp869 cp874 cp932 cp936 cp949 cp950 euc-jp iso8859-13 iso8859-14 iso8859-15 iso8859-1 iso8859-2 iso8859-3 iso8859-4 iso8859-5 iso8859-6 iso8859-7 iso8859-9 koi8-r koi8-ru koi8-u utf8