에 따라 다음과 같이 인코딩 된 텍스트 파일이 있습니다 file
.
CRLF 줄 종결자가있는 ISO-8859 텍스트
이 파일에는 악센트가있는 프랑스어 텍스트가 포함되어 있습니다. 내 셸은 악센트를 표시 할 수 emacs
있으며 콘솔 모드에서는 이러한 악센트를 올바르게 표시 할 수 있습니다.
내 문제는이다 more
, cat
그리고 less
도구가 제대로이 파일을 표시하지 않습니다. 나는이 도구 가이 문자 인코딩 세트를 지원하지 않는다는 것을 의미한다고 생각합니다. 이것이 사실입니까? 이 도구에서 지원하는 문자 인코딩은 무엇입니까?
답변
쉘은 아마도 UTF-8을 사용하고 있기 때문에 악센트 등을 표시 할 수 있습니다. 문제의 파일은 다른 인코딩이기 때문에, less
more
그리고 cat
UTF로 읽고 실패 위해 노력하고 있습니다. 당신은 당신의 현재 인코딩을 확인할 수 있습니다
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