예를 들어 일부 프로그램에서는 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에서 제공하는 선 그리기를 사용하려고 시도조차 하지 않는 응용 프로그램은 라이브러리를 효과적으로 활용하지 못하는 것입니다.
즉, 비슷한 동작을 하는 프로그램을 발견하면 개발자에게 버그로 보고해야 합니다.
추가 자료:
- 라인 그래픽(ncurses addch 매뉴얼 페이지)
border
,wborder
,box
,hline
,whline
,vline
,wvline
,mvhline
,mvwhline
,mvvline
,mvwvline
-저주받은 테두리, 수평선 및 수직선 만들기dialog
스크린샷(전혀선화를 사용하려면 UTF-8 인코딩이 필요합니다)