more, cat 및 less에서 지원되는 문자 인코딩

more, cat 및 less에서 지원되는 문자 인코딩

다음과 같이 인코딩된 텍스트 파일이 있습니다 file.

CRLF 줄 종결자가 있는 ISO-8859 텍스트

파일에는 악센트가 있는 프랑스어 텍스트가 포함되어 있습니다. 내 쉘은 악센트를 표시할 수 있으며 emacs콘솔 모드에서 올바르게 표시합니다.

내 문제는 도구가 파일을 올바르게 표시할 수 없다는 more것 입니다. 나는 이것이 도구가 이 문자 인코딩 세트를 지원하지 않는다는 것을 의미한다고 생각합니다. 이게 진짜야? 이 도구는 어떤 문자 인코딩을 지원합니까?catless

답변1

쉘은 아마도 UTF-8을 사용하기 때문에 악센트 등을 표시할 수 있습니다. 문제의 파일이 다른 인코딩으로 되어 있어 less moreUTF cat로 읽으려고 하면 실패합니다. 다음 명령을 사용하여 현재 인코딩을 확인할 수 있습니다.

echo $LANG

두 가지 옵션이 있습니다. 기본 인코딩을 변경하거나 파일을 UTF-8로 변경할 수 있습니다. 인코딩을 변경하려면 터미널을 열고 다음을 입력하세요.

export LANG="fr_FR.ISO-8859"

예를 들어:

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

또는 이와 유사한 것을 사용하는 경우 gnome-terminal인코딩을 활성화해야 할 수도 있습니다. 예를 들어 terminator마우스 오른쪽 버튼을 클릭하고 다음을 수행하십시오.

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

을 위한 gnome-terminal:

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

다른 (더 나은) 옵션은 파일의 인코딩을 변경하는 것입니다.

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!

답변2

ISO-8858 문자 인코딩은 Linux 시스템에서 다소 구식입니다. 전체 Linux 시스템이 UTF-8을 사용했을 수 있습니다. 터미널 에뮬레이터와 셸을 포함합니다.

하지만. cat, 인코딩 변환을 수행하지 grep않으면 lessISO-8859/latin1 파일을 UTF-8로 처리하므로 작동하지 않습니다.

emacs가 이를 표시할 수 있다면 이는 사용된 인코딩을 자동으로 감지하려고 시도하여 성공했기 때문입니다. emacs에게 파일을 UTF-8로 저장하도록 지시하면 cat// 그 파일에 있는 모든 것을 사용할 수 있습니다 grep.

정확한 문자 인코딩을 알고 있는 경우(ISO-8859는 이들의 모음이며 정확한 인코딩을 알아야 합니다: ISO-8859-1 또는 ISO-8859-15 또는 그 이하) 명령줄에서 파일을 변환할 수도 있습니다.

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8

답변3

Cat, More 및 Less는 단순히 파일을 표시하는 작업을 수행합니다. 코드 간 변환은 작업 설명의 일부가 아닙니다. CRLF는 일반 줄 끝 LF처럼 표시되기 때문에 개행 문자 인코딩은 문제가 되지 않습니다. 그러나 터미널에는 현재 사실상의 표준인 UTF-8 인코딩 텍스트가 필요할 수 있습니다.

루잇지원되는 인코딩과 UTF-8 간에 변환합니다. LC_CTYPE환경 변수를 설정하거나 옵션을 사용하여 번역할 인코딩을 Luit에게 알릴 수 있습니다 -encoding. 예를 들어 latin-1(ISO 8859-1이라고도 함) 파일을 표시하려면 다음을 수행하세요.

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

파일이 Luit가 지원하지 않는 외부 인코딩으로 되어 있는 경우 번역기를 통해 전송할 수 있습니다.다양한 인코딩을 지원합니다.

iconv -f latin1 somefile
iconv -f latin1 somefile | less

관련 정보