openSUSE Linux에서 UTF-8/로캘 문제를 해결하는 방법(터미널/파일 이름 및 프로그램 대화 상자)

openSUSE Linux에서 UTF-8/로캘 문제를 해결하는 방법(터미널/파일 이름 및 프로그램 대화 상자)

일부 파일/폴더 이름이 7자리가 아니며 OpenSUSE 시스템에 올바르게 표시되지 않습니다.

/music/Gabriel_Fauré 폴더의 예:

# ls -1d /music/Gabriel_Faur?
/music/Gabriel_Faur??

로케일이 LC_CTYPE일부 UTF-8 값으로 설정되지 않았을 수 있습니까?

# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_GB.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=a4
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

LC_CTYPE글쎄요, 제 생각엔 유니코드에는 좋은 것 같아요! 오류 메시지는 무엇을 말합니까?

LC_ALL흥미롭게도 정확한 값으로 설정하면 LC_CTYPE문제가 없습니다.

# setenv LC_ALL en_US.UTF-8
# ls -1d /music/Gabriel_Faur?
/music/Gabriel_Fauré

하지만,LC_ALL을 설정하고 싶지 않습니다.en_US.UTF-8 (또는 실제로는 다른 것) 다른 설정을 엉망으로 만들기 때문입니다! 이것은 문제를 해결하지 못하지만 나에게는 나쁜 해결 방법 일뿐입니다.

또한 /bin/ls화면에 문자를 인쇄할 때 쉘에서 LC_CTYPE을 무시하는 이유는 무엇입니까?

Arch Linux에서는 로캘이 생성되었는지 확인했지만 openSUSE에서는 이 주제에 대한 정보를 찾지 못했습니다. 게다가 로케일이 존재하는 것 같습니다.

편집하다:

# ls -1d /music/Gabriel_Faur? | hexdump -C
00000000  2f 6d 75 73 69 63 2f 47  61 62 72 69 65 6c 5f 46  |/music/Gabriel_F|
00000010  61 75 72 c3 a9 0a                                 |aur...|
00000016

따라서 (내가 아는 한) 올바른 UTF-8입니다.

편집 2:

# locale -a | grep en_US
en_US
en_US.iso885915
en_US.utf8
# locale -a | wc -l
495

EDIT3(정답 후):

# unsetenv LC_PAPER
# unsetenv LC_ALL
# ls -1d /*/Gabriel_Faur?
/music/Gabriel_Fauré

LC_PAPER=a4변수는 UTF-8로 인코딩된 유니코드 문자의 인쇄를 방지합니다.화면에!

답변1

저게 뭐에요locale: Cannot set LC_ALL to default locale: No such file or directory사용하려는 로케일 중 하나가 존재하지 않는다는 메시지가 나타납니다. 환경 변수와는 아무런 관련이 없으며 $LC_ALL, 환경 변수를 기반으로 지역화를 초기화하는 호출이 NULL 을 반환할 때 오류를 보고할 뿐입니다. locale이는 다양한 변수 중 하나를 통해 구성된 로케일을 찾을 수 없음을 나타냅니다.setlocale(LC_ALL, "")LC_*/LANG

여기서는 다른 모든 항목을 재정의하므로 . 이 시스템의 유효한 로케일 이름이 아니어서 오류가 발생한다는 LC_ALL=en_US.UTF-8것이 문제입니다 LC_PAPER=a4.a4setlocal(LC_ALL, "")

실패 시 setlocale()동작은 기본적으로 C 로케일로 설정됩니다. 여기서 문자 인코딩은 ASCII입니다. C 로케일에서 각 바이트는 문자이지만 0xc3 및 0xa9는 ASCII 형식이 아니기 때문에 알 수 없는 문자이므로 출력이 터미널에 도달하면 활성화 ls -q됩니다 .-q?

다음 명령을 사용하여 시스템에서 사용 가능한 로캘 목록을 볼 수 있습니다.

locale -a

a4거기에서는 찾지 못할 수도 있습니다. 용지 크기를 A4로 하려면 다음을 locale -k LC_PAPER출력하십시오.

height=297
width=210
paper-codeset="UTF-8"

유럽 ​​로케일을 사용할 수도 있습니다 $LC_PAPER.en_GB.UTF-8

답변2

localeOpenSuse에서는 다음을 통해 삭제 문제를 해결할 수 있습니다.

zypper in glibc-locale

en_GBMicroOs이미지를 만들 때 로케일을 사용하려면 필요합니다.kiwi

관련 정보