콘솔에서 "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 와 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을 표시할 수 있는 경우 tree
UTF-8 표시를 만들고 다음을 사용하여 변환 할 수 있습니다 iconv
.
LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8