특수 문자가 올바르게 표시되지 않음

특수 문자가 올바르게 표시되지 않음

서버 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에서 실행하면 . 및 를 제외한 다른 변수는 로 설정됩니다 .LANGUAGELC=ALLpl_PL.UTF-8localeLANG=en_US.UTF-8LANGUAGELC=ALLen_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 -mB에 pl_PL.UTF-8을 올바르게 해석할 수 있는 올바른 로케일과 문자 집합이 설치되어 있는지 확인하세요.

관련 정보