UTF-8 문자가 Debian에서 올바르게 표시되지 않습니다.

UTF-8 문자가 Debian에서 올바르게 표시되지 않습니다.

내 문제에 대한 간단한 설명:
최근 bash/nano/irssi/etc에서 독일어 움라우트(äüö), 유로 기호(€)와 같은 "특수" UTF-8 문자를 표시할 수 없는 문제가 발생했습니다. ) 및 기타 몇 가지 문자 UTF-8 문자(예: ß, § 등)

내가 시도한 것:

  • dpkg-reconfigure localesen_US.UTF-8만 생성합니다.
  • 설정 LC_ALL및 내 사용자 및 LANG루트 범위LANGUAGEen_US.UTF-8.bashrc
  • 로케일 및 libx11-data 재설치(모든 언어 데이터가 포함된 것으로 보임)

물론 이러한 모든 변경 작업을 수행한 후 SSH를 통해 다시 로그인하고 서버를 다시 시작하려고 시도했습니다. 99,9875%의 경우 Linux에서 어떤 문제도 해결되지 않을 것임을 알았음에도 불구하고 말입니다.

내 시스템 정보:
OS: Debianstretch -> Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2 x86_64 GNU/Linux
로케일: v.2.22-7

출력 locale:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
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=en_US.UTF-8

예를 들어, 입력할 때콘솔에 들어가서 Enter 키를 누르면 -bash: $'\344': command not found.
솔직히 잘 모르겠습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

터미널이 UTF-8 인코딩을 사용한다고 bash 및 기타 애플리케이션에 지시했습니다. 이는 터미널이 실제로 UTF-8을 사용하는 경우에만 작동합니다. Bash는 터미널 인코딩을 결정할 수 없지만 터미널은 수행합니다.

UTF-8을 사용하려면 UTF-8을 사용하도록 터미널을 구성하세요. SSH를 사용하고 있으므로 SSH 클라이언트를 실행하는 모든 터미널이 UTF-8을 사용하도록 구성해야 합니다. 이것은 대부분의 최신 시스템의 기본 설정이지만 귀하의 시스템은 그런 식으로 설정되어 있지 않은 것 같습니다.

LC_CTYPE터미널에서 명시적으로 설정하는 것은 피해야 합니다 . 이상적으로는 터미널에서 설정됩니다. 그러나 이는 특히 SSH를 통해 항상 작동하는 것은 아닙니다(많은 시스템에서 SSH 서버는 클라이언트 설정을 비활성화합니다 LC_CTYPE).

환경 변수를 설정해야 하는 경우 올바른 위치는 다음과 같습니다..profile, 아니요.bashrc.

답변2

X 기반 터미널 에뮬레이터 중 하나가 아닌 Linux 콘솔을 사용하고 있으며 UTF-8 모드에서 실행되고 있지 않은 것 같습니다. 이 스크립트를 사용하여 기능을 켜고 왜 꺼졌는지 조사하겠습니다.

#!/bin/sh
# send character-string to enable UTF-8 mode
if test ".$1" = ".off" ; then
        printf '\033%%@'
else
        printf '\033%%G'
fi

즉, 스크립트를 호출한 utf8다음 다음을 입력합니다.

utf8 on

오류 메시지를 조사하기 위해 두 가지 형태(하나는 UTF-8, 다른 하나는 ISO-8859-1)로 다음과 같은 스크립트를 만들었습니다.

#!/bin/bash
printf "ä\n"
echo "ä"
ä

UTF-8 스크립트는 다음과 같이 말합니다.

$ ./foo
ä
ä
./foo: line 4: ä: command not found

ISO-8859-1 스크립트 표현(사용 시로케일UTF-8 인코딩 사용):

$ ./foo2
./foo2: line 5: $'\344': command not found

요점은 bash로케일에 맞게 오류 메시지를 조정하고 UTF-8 로케일에서는 ISO-8859-1 문자를 표시할 수 없으므로 이를 8진수로 표시한다는 것입니다.

관련 정보