나는 포럼에서 찾을 수 있는 모든 것을 시도했지만 kubuntu 18.04(이전 버전도 아님)의 xterm 창에 표시할 8비트 문자를 얻을 수 없습니다. 0x20-0x7e 범위의 모든 문자가 예상대로 표시되지만 0x80-0xfe 범위의 문자는 없습니다. 이것을 시도하면 설정에 따라 공백 또는 기본 어두운 타원형 물음표 문자 모양이 나타납니다. 내 간단한 테스트는 다음과 같습니다.
에코 -e '\xa2\xa3'
이는 문자 162 및 163(십진수)이며 서양 글꼴에서는 세미콜론과 파운드로 표시되어야 합니다. 128(= 0x80)보다 많은 문자를 선택해 보았지만 결과는 동일했습니다. 내가 테스트한 다양한 조정 사항:
로캘을 UTF-8 스타일로 설정합니다.
UTF-8 인코딩으로 설정합니다(예: en_US.UTF-8).
전체 128-255 문자 세트를 포함하는 다양한 글꼴로 xterm을 시작하십시오.
uxterm과 xterm을 사용해 보았습니다.
단순한 것 외에도에코-e테스트하려면 전체 글꼴 그리드를 표시하거나 적절한 vt-100 esc 명령 시퀀스 및 문자열을 호출하는 테스트 프로그램을 사용하십시오. 예를 들어:
탈출('<' (DEC 보조 문자 세트를 G1에 로드)
Ctrl-N (밖으로 나가서 G1을 "왼쪽 절반" GL 세트에 로드)
\x32 \x33
모든 경우에 기본 문자 "?"만 표시됩니다.
많은 사람들이 포럼에 비슷한 문제에 대해 글을 썼고 위 목록의 조정을 통해 문제를 해결했습니다. 그들 중 누구도 나를 위해 일하지 않았습니다.
저는 64비트가 아닌 32비트 쿠분투를 실행하고 있습니다. 이것이 문제의 요인이 될 수 있습니까?
우리는curses 도구를 사용하여 128-255 범위의 문자를 하나 이상 표시하는 xterm 기반 편집기를 호출하는 사용자 정의 프로그램을 가지고 있습니다. 이 캐릭터는 Sun Solaris에서는 잘 작동하지만 ncurses가 있는 kubuntu Linux에서는 공백으로 나타납니다. 그 문양을 복원하면서 이 추격전이 시작되었습니다.
도움을 주시면 감사하겠습니다. 모든 세부정보를 기꺼이 제공해 드리겠습니다.
답변1
쉘의 로케일이 문제의 일부입니다.
로캘을 UTF-8 스타일로 설정합니다.
UTF-8 인코딩으로 설정합니다(예: en_US.UTF-8).
이는 내부에서 실행 중인 애플리케이션을 알려줍니다.xtermUTF-8을 사용하세요. UTF-8 인코딩은 0x80-0xff 범위의 코드를 사용하여 원하는 대로 멀티바이트 문자를 작성합니다.
때를시작xterm은 어떤 영향을 미칩니 까?그것동일한 코드를 설명해보세요. 로케일이 xterm에 UTF-8을 사용한다고 알려주는 경우 xterm은 UTF-8 인코딩을 사용합니다(참조로케일리소스), 리소스 설정에 따라 끄지 못할 수도 있습니다. (이것은 데스크탑 환경에서 xterm을 실행할 때 특히 문제가 됩니다.시스템 로케일예를 들어 UTF-8을 사용하십시오.en_US.UTF-8
). xterm이 무엇을 하고 있는지 보기 위해 마우스 오른쪽 버튼을 누른 상태에서 메뉴를 사용할 수 있습니다: 항목이 있습니다"UTF-8 인코딩"UTF-8이 필요할 때 확인이 이루어지며,회색으로 변하다바꿀 수 없을 때.
쉘이 시스템의 로케일을 사용하여 초기화된 경우 명령줄에서 이 작업을 수행하는 것으로 충분합니다.
LC_ALL=en_US LANG=en-US xterm
UTF-8이 아닌 ISO-8859-1 및 관련 인코딩에 대해 묻는 것 같습니다. 로케일의 이름입니다.아니요이것".UTF-8"
접미사는 일반적으로 의미합니다.
이것은 의 스크린샷입니다.시험ISO-8859-1에 대한 지침(사용하려는 응용 프로그램에 대해 예상할 수 있는 내용):
UTF-8을 사용하여 인코딩하면 나타나는 내용입니다.
ncurses 라이브러리 확인로케일(호출 애플리케이션이 초기화되어야 함) 0x80-0xff의 단일 바이트가 완전한 멀티바이트 UTF-8을 형성하지 않고 공백을 표시한다는 사실을 발견했습니다. 그러나 로케일(및 터미널) 설정이 일치하면 예상 문자가 표시됩니다.
반면에 귀하의 질문에 언급 된DEC 보충. 이는 xterm의 유니코드 지원에 의존하기 때문에 다릅니다(사용국가 대체 문자 세트). Latin-1은 유니코드에 1-1로 매핑되지만DEC 보충(이것은 Latin-1과 매우 유사합니다.) 아니요.
NRCS(국가 대체 문자 집합)모델xterm에서. (원래 하드웨어 터미널을 사용함)설정선택하다). 응용 프로그램이 실제로 사용하는 경우DEC 보충(이것은 Latin-1과 매우 유사합니다.) 다음과 같은 내용을 볼 수 있습니다(vttest는 Latin-1과 일치하지 않는 부분을 강조 표시합니다).
아니면 다음을 사용할 수도 있습니다.DEC 보충 그림(다시 말하지만 유사):
어느 쪽이든 xterm이 이를 수행할 수 있습니다(UTF-8 활성화). 그러나 매우 오래된 버전의 Ubuntu 배포판에서는 자체 프로그램을 컴파일해야 할 수도 있습니다. 그러나 질문의 맥락에서 볼 때 실제로는 이전 사전 표준 문자 집합이 아닌 Latin-1을 사용하고 있는 것으로 보입니다.
답변2
ASCII가 아닌 문자는 다른 인코딩을 사용합니다. 이전 ISO-8859-x 인코딩은 문자당 1바이트를 사용합니다. 예제의 문자(센트 및 파운드)는 옥텟 0xa2
및 ISO-8859-1(Latin1) 문자 세트를 사용하여 0xa3
인코딩됩니다 . UTF-8은 센트 문자가 두 옥텟의 시퀀스로 인코딩되고 0xc2 0xa2
파운드 문자가 로 인코딩되는 가변 길이 체계를 사용합니다 0xc2 0xa3
.
문자를 올바르게 표시하려면 표시하려는 텍스트에 사용된 문자 인코딩과 일치하도록 로케일을 설정해야 합니다. 로캘을 ISO-8859-1로 설정하거나 텍스트 파일을 UTF-8로 다시 인코딩해야 합니다.
ISO-8859-x 인코딩에 비해 UTF-8의 장점은 UTF-8이 전체 유니코드 범위를 포괄하는 반면, 이전 8비트 인코딩은 표시 가능한 192개 문자만 포괄한다는 것입니다.