터미널: 특수 문자 표시

터미널: 특수 문자 표시

예를 들어 일부 프로그램에서는 htop선과 프레임이 올바르게 표시되지 않습니다. 대신 -합계 로 표시됩니다 /.

여기에 이미지 설명을 입력하세요.

그러나 다른 컴퓨터에서는 올바른 줄로 올바르게 나타납니다.

여기에 이미지 설명을 입력하세요.

이것이 터미널 문제인지 아니면 일부 패키지가 필요한지 잘 모르겠습니다.

해당되는 경우: 내 시스템은 Debian Wheezy, 내 통역사는 bash, 내 터미널 에뮬레이터는 다음과 같습니다.gnome-terminal

답변1

가장 좋은 예는 유니코드가 아닌 로케일(예: ASCII)을 사용하여 실행되고 있습니다. $LANG 환경 변수를 확인하세요(시도해 보세요 ). 접미사를 export | grep LANG찾지 못할 가능성이 높습니다 . .UTF-8추가해 보세요:

export LANG=$LANG.UTF-8

다른 예는 최근 쉘의 기본값인 UTF-8 로케일로 실행되고 있습니다. 이는 htop로케일을 감지하고 ASCII 또는 유니코드 문자를 표시하는 것 같습니다. 따라서 아래쪽 그림에서 멋진 유니코드 문자를 얻을 수 있고 ASCII를 사용하면 멋진 임시 문자를 얻을 수 있습니다. 맨 위 그림에 있는 컴퓨터의 로케일을 유니코드 로케일로 변경하는 것이 좋습니다(참조로케일 - 데비안 위키).

그래도 작동하지 않으면 귀하의 문제일 수 있습니다.터미널 에뮬레이터문제입니다. 기본 인코딩은 유니코드가 아닐 수 있습니다. 터미널 에뮬레이터의 기본 인코딩을 UTF-8로 변경합니다( xfce4-terminal고급 탭에서 찾았습니다). 그렇지 않은 경우 현재 글꼴이 유니코드를 지원하지 않을 수 있습니다. 글꼴을 유니코드로 변경해 보세요.

[이상하게도 쉘 세션에서 한 번 로케일을 ASCII로 변경하면 htop다시 변경한 후에도 항상 ASCII 문자가 표시되는 것을 발견했습니다. 어떤 이유로 쉘에서 가끔 로케일을 변경한다면 이것이 문제일 수 있습니다. ]

답변2

이상한 점은 htop유니코드 유무에 관계없이 선을 그릴 수 있는 ncurses를 사용한다는 것입니다. 그런데 소스코드를 보면CRT.c디스플레이 지침:

#ifdef HAVE_LIBNCURSESW
   if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
      CRT_utf8 = true;
   else
      CRT_utf8 = false;
#endif

   CRT_treeStr =
#ifdef HAVE_LIBNCURSESW
      CRT_utf8 ? CRT_treeStrUtf8 :
#endif
      CRT_treeStrAscii;

그리고CRT_treeStrUtf8값은

const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
   "\xe2\x94\x80", // TREE_STR_HORZ ─
   "\xe2\x94\x82", // TREE_STR_VERT │
   "\xe2\x94\x9c", // TREE_STR_RTEE ├
   "\xe2\x94\x94", // TREE_STR_BEND └
   "\xe2\x94\x8c", // TREE_STR_TEND ┌
   "+",            // TREE_STR_OPEN +
   "\xe2\x94\x80", // TREE_STR_SHUT ─
};

그러나 ncurses(모든curses 구현)에는 인코딩이 UTF-8인지 여부에 의존하지 않는 이식 가능한 기호가 있습니다. 일부 애플리케이션(예:대화옵션 --ascii-lines)은옵션ASCII를 사용하여 선을 그리지만 ncurses에서 제공하는 선 그리기를 사용하려고 시도조차 하지 않는 응용 프로그램은 라이브러리를 효과적으로 활용하지 못하는 것입니다.

즉, 비슷한 동작을 하는 프로그램을 발견하면 개발자에게 버그로 보고해야 합니다.

추가 자료:

관련 정보