Linux

我可以在執行時確定可用的 NLS 字元集嗎?

  • February 11, 2022

我可以在/proc/filesystems.

除了嘗試掛載文件系統之外,有沒有辦法確定我可以將哪些字元集與mountoptionsiocharset或一起使用?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

引用自:https://unix.stackexchange.com/questions/667435