런타임 시 사용 가능한 NLS 문자 집합을 확인할 수 있나요?

런타임 시 사용 가능한 NLS 문자 집합을 확인할 수 있나요?

.NET에서 커널이 지원하는 파일 시스템 유형 목록을 찾을 수 있습니다 /proc/filesystems.

파일 시스템을 마운트하는 것 외에도 옵션 mount또는 ?를 통해 iocharset사용할 수 있는 문자 세트를 결정하는 방법이 있습니까?nls

이상적으로는 목록이 Bash 배열에 있어야 명령을 완료하는 데 사용할 수 있습니다.

답변1

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

관련 정보