콘솔의 UTF-8 시퀀스

콘솔의 UTF-8 시퀀스

콘솔에서 "tree" 명령을 실행하면 다음과 같은 결과가 나타납니다.

.
├── Annexe\ 1\ -\ Sch\303\251ma\ global\ de\ la\ base\ de\ donn\303\251es.raw
...

결과는 UTF-8 시퀀스로 구성되며 보고된 문자열을 사람이 읽을 수 있는 형식으로 가져와야 합니다. 이 불쾌한 일을 어떻게 바꿀 수 있습니까?

답변1

--charset스위치와 함께 사용하려는 문자 집합을 지정할 수 있습니다 .

   --charset charset
          Set the character set to use when outputting HTML and for line 
          drawing.

또한 다음 2개의 스위치가 도움이 될 수 있습니다.

   -q     Print non-printable characters in filenames as question marks 
          instead of the default.

   -N     Print non-printable characters as is instead of as escaped octal 
          numbers.

또한 다음 스위치를 사용하여 출력을 향상시킬 수도 있습니다.

   -A     Turn on ANSI line graphics hack when printing the indentation 
          lines.

   -S     Turn on ASCII line graphics (useful when using Linux console mode 
          fonts). This option is now equivalent to `--charset=IBM437' and 
          may eventually be depreciated.

답변2

다음을 사용하여 출력을 얻을 수 있습니다.

LC_ALL=C tree -A

0303 및 0251이 유효한 문자(또는 해당 로케일의 문자 시퀀스)로 간주되지 않는지 \303\251확인할 수 있습니다 .tree

\303\251그러나 이는 is é및 iso-8859-1 또는 iso-8859-15(프랑스어 사용 국가에서 일반적으로 사용되는 두 개의 일반적인 문자당 단일 바이트 문자 집합) 인 UTF-8 로케일에서 작동하며 \303is Ã\251is 입니다 ©.

따라서 여기에서는 C 로케일과 마찬가지로 ASCII와 같이 처음 128바이트 값에 대해서만 정의된 문자 집합이 있는 로케일에 있습니다.

tree문자 세트가 UTF-8 또는 iso-8859-15임을 알 수 있으며 해당 0303 바이트를 \303.

locale -a시스템에 UTF-8 문자 집합을 사용하는 로캘이 있는지 알려줍니다. 그런 다음 다음과 같은 것을 선택할 수 있습니다 fr_FR.UTF-8.

LC_ALL=fr_FR.UTF-8 tree

그러나 올바르게 표시되는지 여부는 터미널 에뮬레이터의 이해에 따라 달라집니다. UTF-8 문자를 표시하도록 구성되지 않으면 작동하지 않습니다.

터미널 에뮬레이터에서 iso-8859-1을 표시할 수 있는 경우 treeUTF-8 표시를 활성화하고 다음 명령을 사용하여 변환할 수 있습니다 iconv.

LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8

관련 정보