2009-09-12 4 views
1

최근까지만해도 블로그에서 PHP와 MySQL의 문자 인코딩 설정이 일치하지 않았습니다. 그 이후로 근본적인 문제가 해결되었지만 쓰레기로 가득 찬 텍스트가 여전히 있습니다. 예를 들어 ïï이되었습니다.문자 인코딩 도구를 통해 전송 된 문서는 어떻게 복구합니까?

패턴 인식 및 통계를 사용하여 깨진 텍스트를 자동으로 발견하고 고칠 수있는 소프트웨어가 있습니까?

예를 들어, U+00EF (UTF-8 0xC3 0xAF)이 U+00C3 U+00AF (UTF-8 0xC3 0x83 0xC2 0xAF)이 된 것 같습니다. 즉, 코드 포인트에 16 진수 인코딩이 사용되었습니다. 이 패턴은 내 사이트에서 (비 연속적으로) 비 ASCII 문자로 발생했습니다.

답변

0

아마도 정규식, http://en.wikipedia.org/wiki/Regular_expression을 조사하고 싶을 것입니다. 이것을 사용하여 문제의 문자를 검색하고 바꿀 수 있습니다.

다음은 MySQL 정규식 문서 http://dev.mysql.com/doc/refman/5.1/en/regexp.html입니다.

+0

나는 분명히하기 위해 나의 글을 편집했다 : 그것은 단지이 캐릭터가 아니다. 내 말은, 확실히 DB를 덤프하고, 비 ASCII 문자 시퀀스를 모두 찾고, 원래 값 (적절한 경우)을 찾고, 파일 전체에서 찾기 및 바꾸기를 직접 실행할 수는 있지만 ... 보다 일반적인 해결책. – phyzome

1

당신이 인용 한 예제는 오래된 utf8-over-latin1처럼 보입니다. 다음과 같은 검색어를 신속하게 사용해 볼 수 있습니다.

select convert(convert(the_problem_column using binary) using utf8) 

이 문제를 해결할 수 있는지 확인해보십시오.

모든 데이터가 동일한 인코딩 변환 시퀀스를 거치며 손실이없는 변환이없는 한 해당 라인을 따라 인코딩 변환이 이루어져야합니다. 그 중 일부는 변형.

동일한 인코딩 변환을 거친 데이터에 의존 할 수 없다면 가비지 문자 데이터를 스캔하여 원하는 문자로 바꾸는 것이 중요합니다. 어떤 사람은 쓰레기가 무엇인지, 어떤 것이 의도되었는지를 정의합니다.

answer에서 수작업 스크립트를 사용하여 그러한 종류의 수리 작업을 수행하는 방법에 대한 일부 설명입니다. 나는 자연어와 인코딩의 모든 범위를 알고 있고, 가능한 문제를 발견하는 데있어보다 진보 된 통계적 접근 방법을 취하는 툴을 알고 있으며, 문제를 해결하기위한 정확한 변환을 권고한다.