터미널 문자 인코딩 문제 BitchX

터미널 문자 인코딩 문제 BitchX

나는 달렸다BitchX세 가지 다른 Linux 운영 체제에서 그 중 두 개(Linux OpenSUSE 11.4 및 BackTrack 5 R1)에서 yakuake/konsole(OpenSUSE) 및 terminator/tilda(BT 5 R1)를 사용하여 이상한 물음표가 표시되었기 때문입니다.

그러나 RoxTerm이 포함된 PuppyLinux Lucid 528에서는 문자가 원래대로 표시됩니다(그리스 문자 "fi"). 이제 SUSE와 BT 모두에서 $LC_CTYPE의 값을 확인했는데 이는 Puppy Linux와 동일합니다(예: en_US이므로 utf-8 인코딩이 없음).

SUSE 및 BT에서 (터미널 설정에서) 다양한 문자 인코딩을 시도했고 변경 사항을 발견했지만 텍스트가 여전히 가끔 깨져서 물음표 대신 이해할 수 없는 이상한 "u"가 표시됩니다. s(Puppy에서는 항상 올바르게 표시됩니다).

이 성가신 문제의 원인은 무엇입니까?
차이점은 무엇이며 차이점을 어떻게 확인할 수 있나요?

답변1

여기서는 여러 가지 일이 일어나고 있습니다.

LC_CTYPE=en_US이것이 실제로 "utf-8 없음"을 의미하는지 먼저 확인할 수 있습니까 ?

nl_langinfo기능은 다음과 같은 도움이 될 수 있습니다.

$ python
>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, 'en_US')
'en_US'
>>> locale.nl_langinfo(locale.CODESET)
'ISO-8859-1'

둘째, 한 번에 하나의 변수만 변경하는 것이 도움이 될 수 있습니다. 예를 들어 RoxTerm이 PuppyLinux에서 작동한다면 OpenSUSE 및/또는 BackTrack에서도 작동합니까? BitchX버전이 다를 경우를 대비해 어떤 버전을 사용하고 있는지 알려주실 수 있나요 ?

마지막으로 IRC는 문자 인코딩 정보를 실제로 제공하지 않으므로 서버와 채널의 모든 사용자는 문자 인코딩에 동의해야 합니다. 요즘 대부분의 사용자가 UTF-8을 사용하고 있는 것 같은데, 설정을 UTF-8로 변경해 보는 것이 어떨까요?


고쳐 쓰다

BitchX가 UTF-8을 지원하지 않는다고 말씀하셨는데요.

그러면 다른 유저들과 대화하는데 문제가 생길 것 같아요.

하지만 다른 사람들이 모두 그리스어를 사용하고 BitchX도 사용한다면 아마도 여러분도 BitchX를 사용하고 싶을 것입니다.그리스어 ISO-8859-7 문자 세트.

내 시스템에서 ISO-8859-7을 지원하는 유일한 두 개의 로케일은 그리스어 로케일입니다(예: el_GR.iso88597.

실행하여 locale -a전체 옵션 목록을 확인한 다음 해당 문자 집합이 포함된 옵션을 선택하세요.

답변2

다이아몬드 안의 물음표는 아마도 클라이언트 프로그램이 문자를 받아들이고 이를 디스플레이 엔진에 전달하지만(제 말이 맞나요, BitchX는 단지 터미널 프로그램일까요?) 터미널이 이를 렌더링할 수 없다는 의미일 것입니다. 따라서 이는 터미널 구성 문제일 수 있습니다. 예를 들어 선택한 글꼴에 그리스 문자에 대한 글리프가 포함되어 있지 않습니다. 해당 터미널에서 "hexdump -C"와 같은 명령을 실행하여 다른 터미널에 복사하고 붙여넣어 테스트할 수 있습니다. 그러면 phi 코드 포인트(U+03C6, 즉 utf-8의 hexdump에 "CF 86"이 표시됨)가 표시됩니다. 그렇다면 그리스어를 지원하는 글꼴을 선택해 보세요.

\u03C6 등과 같은 내용이 표시되면 로케일이 손상되어(유니코드 아님) 클라이언트가 문자를 수락하고 해당 문자에 유니코드 처리를 적용하지만 직접 출력하지 못하고 대체 모드로 전환한다는 의미일 수 있습니다. 따라서 SuSE와 BT 설정 모두 비유니코드 인코딩(아마도 ISO-8859-1)에 대한 별칭으로 en_US를 갖고 있는 것 같습니다. en_US.UTF-8을 직접 설정하고 효과를 비교해 보세요.

관련 정보