>php教程 >PHP开发 >Linux에서 파일에 중국어 문자가 왜곡되는 경우가 있습니다.

Linux에서 파일에 중국어 문자가 왜곡되는 경우가 있습니다.

高洛峰
高洛峰원래의
2016-12-15 16:28:491570검색

실제로 문자 깨짐 문제는 시스템에 통합된 문자 세트로 인해 발생합니다. 해당 문자의 문자 세트를 올바르게 사용할 수 없기 때문에 OS가 텍스트를 인식하지 못하여 문자 깨짐이 발생합니다. 어렵지 않아요...

우선 Linux OS를 제어하는 ​​언어 환경 변수가 $LANG, $LC_ALL이라는 것을 알아야 문자 깨짐 문제를 해결하려면 위의 설정만 하면 됩니다. 두 변수가 올바르게 작동합니다.

코드가 깨지는 상황은 두 가지입니다.
1. 터미널의 코드가 깨졌습니다(순수 쉘 인터페이스)
vi /etc/profile
export LC_ALL="zh_CN.GB18030 :zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US .UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5"
저장하고 종료한 후 시스템을 재부팅합니다..

2. 깨졌습니다. X-window의 문자(그래픽 인터페이스)
vi /etc/sysconfig/i18n
LANG="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh :zh_TW:zh_CN.BIG5"
LANGUAGE=" zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5"
저장 재부팅...

중국어로 인해 문자셋 코드가 많고, 호환성도 잘 모르겠어서 최대한 다양한 코드를 찾아 적어보려 노력했습니다. 일반적인 해결책은 제어 환경을 수정하고 OS에서 지원하는 문자 세트를 늘리는 것입니다(전제 조건은 문자가 커널에 존재해야 한다는 것입니다. 그렇지 않으면 커널을 컴파일해야 합니다).


개발 중인 WEB 시스템이 RED HEAD에 배포됩니다.
RH 버전 정보:
LSB 버전: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
배포자 ID: RedHatEnterpriseServer
설명: Red Hat Enterprise Linux Server 릴리스 5(Tikanga)
릴리스: 5
코드 이름: Tikanga
--------------- ------------------
로케일 정보
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC= " zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN .UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF - 8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
--------------- - ------------------
프로그램 디렉토리에는 읽어서 페이지에 표시해야 하는 파일이 여러 개 있기 때문입니다.
File.list() 메서드를 사용하여 파일 이름 목록을 얻었지만 표시된 모든 문자가 왜곡되어 있습니다.
new String(filename.getBytes("utf-8"),"GBK");
new String(filename.getBytes("iso-8859-1"),"GBK")
new String(filename.getBytes(),GBK");

이 작동하지 않습니다.
"utf-8"을 가져오려면 System.getProperty("file.encoding")를 사용하세요.
또한, ls 명령을 사용하여 보면 왜곡됩니다. ls --show-control-chars 명령을 사용하여 중국어 이름(콘솔)을 표시합니다.




로케일 추가, 시스템이 gbk 문자 세트를 지원하지 않는 것 같습니다.

우분투에서는 vi /var/lib/locales/supported.d/local입니다

추가한 후 locale을 실행하세요.


Linux에서 Windows에서 파일을 작동해야 하는 경우 Windows의 기본 파일 형식은 GBK(gb2312)입니다. , Linux에서는 일반적으로 GBK(gb2312)를 사용합니다. Linux에서 파일 인코딩을 확인하는 방법과 파일을 변환하는 방법은 다음과 같습니다.
1. 파일 인코딩을 확인할 수 있습니다. Linux에서는 다음과 같은 방법으로 파일 인코딩을 볼 수 있습니다.
:set fileencoding
에서 파일 인코딩 형식을 표시할 수 있습니다.
다른 인코딩으로 파일을 보려면 형식을 지정하거나 Vim을 사용하여 파일을 보려면 문자가 깨져서 문제가 있는 경우
~/.vimrc 파일에 다음 내용을 추가할 수 있습니다.
set 인코딩=utf-8
fileencodings= ucs-bom,utf-8,cp936
이런 방식으로 vim은 파일 인코딩을 자동으로 식별할 수 있습니다(UTF-8 또는 GBK로 인코딩된 파일을 자동으로 식별할 수 있음). 실제로는 fileencodings에서 제공하는 인코딩 목록에 따라 시도하는 것입니다. 적절한 인코딩이 없으면 라틴어를 사용하세요. -1(ASCII) 인코딩.
2. enca(이 명령이 시스템에 설치되지 않은 경우 sudo yum install -y enca를 사용하여 설치할 수 있음) 파일 인코딩을 확인합니다.
$ enca filename
filename: 범용 변환 형식 8 비트; UTF-8
CRLF 라인 종결자
enca는 특정 GBK 인코딩 파일을 잘 인식하지 못한다는 점에 유의해야 합니다. 인식 중에는
인식할 수 없는 인코딩
두 번째, 파일 인코딩 변환이 표시됩니다.
1. 파일을 utf-8 형식으로 변환하는 등 Vim에서 직접 파일 인코딩을 변환합니다.
:set fileencoding=utf-8
2. iconv 변환, iconv의 명령 형식은 다음과 같습니다. 🎜>iconv - f 인코딩 -t 인코딩 입력 파일
예를 들어 UTF-8 인코딩 파일을 GBK 인코딩으로 변환
iconv -f GBK -t UTF-8 file1 -o file2
enconv 변환 파일 인코딩
예를 들어 GBK 인코딩 파일을 UTF-8 인코딩으로 변환하려면 작업은 다음과 같습니다.
enconv -L zh_CN -x UTF-8 파일 이름
셋째, 파일 이름 인코딩 변환:
Linux에서 Windows로 파일 복사 또는 Windows에서 Linux로 파일을 복사할 때 중국어 파일 이름이 가끔 깨져 보이는 경우가 있습니다. 이 문제의 원인은 Windows에서 파일 이름의 기본 중국어 인코딩이 GBK인데 반해 기본 파일 이름 인코딩은 GBK이기 때문입니다. Linux에서는 일관되지 않은 인코딩으로 인해 파일 이름이 왜곡되는 문제가 발생합니다. 이 문제를 해결하려면 파일 이름을 트랜스코딩해야 합니다.
Linux에서는 파일 이름 인코딩을 변환하기 위해 특별히 제공되는 도구인 convmv를 사용하면 파일 이름을 GBK에서 UTF-8 인코딩으로 변환하거나 UTF-8에서 GBK로 변환할 수 있습니다.
먼저 시스템에 convmv가 설치되어 있는지 확인하세요. 그렇지 않은 경우
yum -y install convmv를 사용하여 설치하세요.

convmv의 구체적인 사용법을 살펴보겠습니다.
convmv -f 소스 인코딩 -t 새 인코딩 [옵션] 파일 이름
공통 매개변수:
-r 하위 폴더를 재귀적으로 처리합니다
–notest 실제로 작업을 수행합니다. 기본적으로 파일의 실제 작업은 수행되지 않고 테스트만 수행됩니다.
–list는 지원되는 모든 인코딩을 표시합니다
–unescap %20을 공백으로 바꾸는 등 일부 이스케이프를 수행할 수 있습니다

예를 들어, utf8로 인코딩된 파일 이름이 있는 경우 GBK로 변환합니다. 인코딩, 명령 다음과 같습니다:
convmv -f UTF-8 -t GBK –notest utf8 인코딩된 파일 이름
이 변환 후 "utf8 인코딩된 파일 이름"이 GBK 인코딩으로 변환됩니다(파일 이름 인코딩만) 변환, 파일 내용은 변경되지 않습니다)


4. Vim 인코딩 설정
모든 널리 사용되는 텍스트 편집기와 마찬가지로 Vim은 UCS -2를 포함하는 다양한 문자 인코딩으로 파일을 잘 편집할 수 있습니다. , UTF-8 및 기타 널리 사용되는 유니코드 인코딩 방법입니다. 불행하게도 Linux 세계의 많은 소프트웨어와 마찬가지로 이를 위해서는 사용자가 직접 설정해야 합니다.
Vim에는 문자 인코딩, 인코딩, 파일 인코딩, 파일 인코딩, 용어 인코딩과 관련된 네 가지 옵션이 있습니다(이러한 옵션의 가능한 값은 Vim 온라인 도움말: 도움말 인코딩 이름을 참조하세요).
* 인코딩: Vim의 버퍼, 메뉴 텍스트, 메시지 텍스트 등을 포함하여 Vim 내부적으로 사용되는 문자 인코딩입니다. 기본값은 로케일에 따라 선택됩니다. 사용자 설명서에서는 .vimrc에서만 값을 변경하도록 권장합니다. 실제로는 .vimrc에서만 값을 변경하는 것이 의미가 있는 것 같습니다. 다른 인코딩을 사용하여 파일을 편집하고 저장할 수 있습니다. 예를 들어 vim 인코딩이 utf-8이고 편집된 파일이 cp936으로 인코딩된 경우 vim은 읽은 파일을 자동으로 utf-8로 변환합니다(vim은 읽을 수 있음). 파일을 쓰면 자동으로 cp936(파일 저장 인코딩)으로 다시 전환됩니다.
* 파일 인코딩: Vim에서 현재 편집된 파일의 문자 인코딩 방법, Vim은 파일도 여기에 저장합니다. 문자 인코딩(파일이 새 파일인지 여부에 관계 없음)
* 파일 인코딩: Vim은 시작할 때 파일 인코딩의 순차적 목록을 자동으로 감지하고, 나열된 문자 인코딩에 따라 열 파일의 문자 인코딩을 하나씩 감지하고, 감지된 최종 문자 인코딩으로 파일 인코딩을 설정합니다. . 따라서 이 목록의 맨 위에 유니코드 인코딩 방법을 배치하고 마지막에 라틴어 인코딩 방법 latin1을 배치하는 것이 가장 좋습니다.
* termencoding: Vim이 작동하는 터미널(또는 Windows의 콘솔 창)의 문자 인코딩 방법입니다. vim이 위치한 용어가 vim 인코딩과 동일하면 설정이 필요하지 않습니다. 그렇지 않으면 vim의 termencoding 옵션을 사용하여 자동으로 용어 인코딩으로 변환할 수 있습니다. 이 옵션은 Windows에서 일반적으로 사용되는 GUI 모드 gVim에 유효하지 않으며 콘솔 모드 Vim의 경우 Windows 콘솔의 코드 페이지이며 일반적으로 우리는 그렇지 않습니다. 변경할 필요는 없습니다.


5. Vim의 다중 문자 인코딩 작업 방법
1. Vim을 시작하고 .vimrc에 설정된 인코딩 값에 따라 버퍼, 메뉴 텍스트 및 메시지 텍스트의 문자 인코딩 방법을 설정합니다.

2. 편집할 파일을 읽어서 파일 인코딩에 나열된 문자 인코딩 방법에 따라 파일 인코딩 방법을 하나씩 감지합니다. 그리고 파일 인코딩을 감지되고 겉보기에 올바른(참고 1) 문자 인코딩으로 설정합니다.

3. 파일인코딩 값과 인코딩 값이 다른 경우 iconv를 호출하여 파일 내용을 인코딩에서 설명한 문자 인코딩 방식으로 변환하고, 이를 위해 열린 버퍼에 변환된 내용을 넣습니다. 파일입니다. 그러면 이 파일 편집을 시작할 수 있습니다. 이 단계를 완료하려면 외부 iconv.dll을 호출해야 합니다(참고 2). 이 파일이 $VIMRUNTIME 또는 PATH 환경 변수에 나열된 다른 디렉터리에 있는지 확인해야 합니다.

4. 파일 편집 후 저장할 때 파일인코딩 값과 인코딩 값을 다시 비교해보세요. 서로 다른 경우 iconv를 다시 호출하여 저장할 버퍼의 텍스트를 fileencoding에서 설명하는 문자 인코딩으로 변환하고 지정된 파일에 저장합니다. 이 경우에도 iconv.dll을 호출해야 합니다. 유니코드는 거의 모든 언어의 문자를 포함할 수 있고 유니코드의 UTF-8 인코딩은 매우 비용 효과적인 인코딩이므로(공간 소비가 UCS-2보다 작습니다) 인코딩을 utf-8로 설정합니다. 이렇게 하는 또 다른 이유는 인코딩이 utf-8로 설정되면 Vim이 자동으로 파일의 인코딩 방법을 더 정확하게 감지하기 때문입니다(아마도 이것이 주된 이유일 것입니다. 우리가 중국어 Windows에서 편집하는 파일은 다른 소프트웨어와의 계정 호환성 파일 인코딩을 GB2312/GBK로 설정하는 것이 더 적절하므로 파일 인코딩을 중국어로 설정하는 것이 좋습니다(중국어는 별칭으로 Unix에서는 gb2312, Windows에서는 cp936의 코드 페이지를 의미함) GBK).

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.