콘솔의 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\251is 와 is é가 있는 iso-8859-1 또는 iso-8859-15(프랑스어 사용 국가에서 흔히 사용되는 문자 집합당 두 개의 공통 단일 바이트 문자 집합)인 UTF-8 로케일에서 유효합니다 .\303Ã\251©

따라서 여기서는 ASCII가 C 로케일과 마찬가지로 처음 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

관련 정보