
서버 A(Debian 7.4)에서 서버 B(Debian 7.4)로 파일을 복사할 때 문제가 발생합니다. 파일의 폴란드어 특수 문자가 서버 B(mcedit)에 올바르게 표시되지 않습니다.
locale
서버 A에서 폴란드어 특수 문자로 파일을 만들었습니다. 서버 A에서는 올바르게 표시됩니다. 서버 A에서 실행하면 및 LANG=pl_PL.UTF-8
를 제외한 다른 변수가 로 설정 됩니다 . 그런 다음 tar 파일을 다운로드하고 Server BI에서 wget 명령을 사용하여 tar 파일을 다운로드합니다. Server BI untar 파일에서 파일 내용(mcedit)을 보면 폴란드어 문자가 잘못 표시됩니다. 특수 문자 대신 "다이아몬드"가 있습니다. 서버 B에서 실행하면 . 및 를 제외한 다른 변수는 로 설정됩니다 .LANGUAGE
LC=ALL
pl_PL.UTF-8
locale
LANG=en_US.UTF-8
LANGUAGE
LC=ALL
en_US.UTF-8
그런 다음 데이터베이스 마이그레이션(php 스크립트)을 실행하면 손상된 데이터가 데이터베이스에 삽입됩니다. 마이그레이션에 행을 추가하면 특수 문자가 다음과 같은 문자열로 대체됩니다 Å›
(광택 문자 ś
는 로 대체됨 Å›
).
서버 A와 서버 B의 파일이 두 서버 모두에서 동일한 값을 갖는 것을 mcedit에서 확인했습니다. Polsih 문자 'ś'는 두 시스템 모두에서 C5 9B(16진수)입니다.
최악의 점은 특수 문자가 있을 때마다 데이터베이스의 오류를 수동으로 확인하고 수정해야 한다는 것입니다.
아마도 PHP 마이그레이션 스크립트로 데이터베이스의 열 값을 편집하면 데이터베이스의 데이터도 손상될 수 있습니다. 테이블에서 데이터를 읽은 다음 조작하고 저장하면 데이터도 손상되었습니다.
서버 B의 로케일을 다른 언어(예: 독일어, 체코어 등)의 특수 문자로 변경하면 pl_PL.UTF-8
제대로 작동합니까? 글꼴 문제인 경우 데이터베이스 마이그레이션도 손상되는 이유는 무엇입니까? UTF-8을 사용하고 있다면 모든 언어의 모든 특수 문자가 올바르게 표시되어야 합니까? 모든 언어의 특수 문자를 올바르게 표시하는 방법과 PHP 마이그레이션이 올바르게 수행되도록 하려면 어떻게 해야 합니까?
업데이트 1:
서버 A locale -a
출력:
C
C.UTF-8
pl_PL.utf8
POSIX
서버 B locale -a
출력:
C
C.UTF-8
en_US.utf8
POSIX
두 서버 모두에서 locale -m은 많은 charmap을 출력합니다(두 시스템 모두에서 동일한 것으로 보임).
답변1
의 출력을 확인하여 locale -a
서버 locale -m
B에 pl_PL.UTF-8을 올바르게 해석할 수 있는 올바른 로케일과 문자 집합이 설치되어 있는지 확인하세요.