xterm에 유니코드 보충 다국어 평면(평면 1) 문자를 표시하려고 합니다. 이러한 문자 모양은 U+010000..U+01FFFF(https://unifoundry.com/pub/unifont/unifont-15.0.01/unifont_plane1-15.0.01.bmp).
글꼴은 unifont-15.0.01.hex 및 unifont_upper-15.0.01.hex의 병합 버전으로, bdf로 변환되고 내 .Xresources 파일을 통해 로드됩니다.
*locale: true
*ut8: true
xterm*font: -*-merged-*-*-*-16-*
평면 0(U+0000..U+FFFF) 문자 모양이 작동합니다.
이 게시물과 유사한 로케일 문제일 수 있다고 생각합니다.xterm은 ubuntu 18.04에서 8비트 문자를 표시할 수 없습니다..
나는 시도했지만 LANG=en_US.UTF-8
성공 LANG=en_US
하지 못했습니다.
편집: LANG=en_US.UTF-8
유니코드 보충 다국어 평면(평면 1)을 설정할 때 xterm의 문자 모양이 "이상한 사각형"으로 나타납니다. en-US 로케일로 xterm을 시작하면 LC_ALL=en_US LANG=en-US xterm
플랫 1 문자가 표시되지 않거나 잘못 인코딩됩니다.
다른 로케일을 사용해야 합니까? 그렇다면 어느 것이, 어떻게? 또한 "unifont_upper"를 병합하는 대신 대체 항목으로 정의하는 것이 더 낫습니까?
답변1
비트맵 글꼴은 X 라이브러리 인터페이스를 사용합니다.XDrawString16
(바라보다소스 코드)은 이름에서 알 수 있듯이 16비트 글꼴 인덱스로 제한됩니다.
가능한XmbDrawString
이 제한을 초과하는 것이 가능합니다(그러나 이는 대략적인 맨페이지에서는 단서를 제공하지 않으므로 소스 코드를 연구해야만 확인할 수 있습니다). 보시다시피 이것은 단순한 교체가 아닙니다.이 토론.
가고 싶다면뼈 형태발생 단백질, TrueType 글꼴을 사용해야 합니다.
답변2
xFFFF를 넘어서는 범위에 문제가 있으므로 echo -e "\u1234"
?를 사용하여 이 이스케이프 코드를 인쇄하는 간단한 방법이 있을 것 같습니다.
- \u1234 - 0000-ffff 범위의 유니코드 기호를 인쇄합니다.
- \U12345678 - 00000000-ffffffff 범위의 유니코드 기호를 인쇄합니다.