[unix] 고양이 이상에서 지원되는 문자 인코딩

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

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

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

내 문제는이다 more, cat그리고 less도구가 제대로이 파일을 표시하지 않습니다. 나는이 도구 가이 문자 인코딩 세트를 지원하지 않는다는 것을 의미한다고 생각합니다. 이것이 사실입니까? 이 도구에서 지원하는 문자 인코딩은 무엇입니까?



답변

쉘은 아마도 UTF-8을 사용하고 있기 때문에 악센트 등을 표시 할 수 있습니다. 문제의 파일은 다른 인코딩이기 때문에, less more그리고 catUTF로 읽고 실패 위해 노력하고 있습니다. 당신은 당신의 현재 인코딩을 확인할 수 있습니다

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!


답변

ISO-8858 문자 인코딩은 Linux 시스템에서 약간 구식입니다. 전체 Linux 시스템은 UTF-8을 항상 사용하고있을 것입니다. 터미널 에뮬레이터와 쉘을 포함합니다.

하나. cat, grep그리고 less어떤 인코딩 변환을하지 않는다, 그들은 어떤 작동하지 않습니다, UTF-8로 ISO-8859 / 라틴 파일을 처리합니다.

emacs가 그것들을 표시 할 수 있다면, 사용 된 인코딩을 자동 감지하고 성공한 것 같습니다. emacs에 파일을 UTF-8로 저장하도록 지시하면 cat/ grep/ what 을 사용할 수 있습니다.

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

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


답변

Cat, More and Less는 파일을 표시하는 작업을 수행하고 있습니다. 인코딩 간 번역은 작업 설명에 없습니다. CRLF가 일반 줄 끝 LF와 같이 표시되므로 줄 바꿈 인코딩은 문제가되지 않지만 터미널은 현재 사실상 표준 인 UTF-8 인코딩 텍스트를 기대하고 있습니다.

Luit 은 지원되는 인코딩과 UTF-8을 변환합니다. LC_CTYPE환경 변수 를 설정 하거나 -encoding옵션을 사용하여 번역 할 인코딩을 Luit에 알려줍니다 . 예를 들어 latin-1 (일명 ISO 8859-1) 파일을 표시하려면 다음을 수행하십시오.

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

파일이 Luit에서 지원하지 않는 이국적인 인코딩 인 경우 번역기 프로그램을 통해 파일을 파이프 할 수 있습니다. Iconv 는 많은 인코딩을 지원합니다.

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


답변