2008-10-15 13 views

답변

1

편집 : (SQL 로더에 대한 제거 비트는 더 이상 관련이 없을 것 같은.)

하나의 문제는 잘못된 UTF-8 문자의 "끝"으로 간주 어떤 작업을 될 것입니다. 불법적 인 내용은 쉽게 말할 수 있지만, 다음 법적 성격이 시작되는 곳은 분명하지 않을 수 있습니다.

+0

은 간단합니다 - 즉, UTF-8의 디자인에 대한 아주 멋진 것들 중 하나입니다. http://tools.ietf.org/html/rfc3629 –

+2

올바른 형식의 UTF-8 만 쉽게 사용할 수 있습니다. 중복되는 리드 바이트가 삽입되었다고 상상해보십시오. 첫 번째 발생을 건너 뛰어야합니다. UTF-8 규칙을 따랐 으면 다음 문자는 선두 바이트가 복제 된 문자의 마지막 바이트로 시작하는 것처럼 보입니다. – MSalters

+0

@MSalters : 그건 내가 생각하고있는 종류의 것이지만, 나 자신만으로는 충분하지 않다. :) –

1

RFC 3629은 UTF-8 문자의 구조를 설명합니다. 그 점을 살펴보면 잘못된 문자를 찾는 것이 매우 쉽다는 것을 알 수 있습니다. 다음 문자 경계는 항상 쉽게 찾을 수 있습니다 (문자는 < 128이거나 "긴 문자"시작 마커 중 하나임) 110 비트, 1110 비트, 또는 11110 비트).

BKB가 아마도 정확할 것입니다. 가장 쉬운 대답은 perl이 필터를 사용하여 잘못된 utf-8을 발견했을 때 Perl이 무엇을하는지 확신 할 수는 없지만 perl이 대신 해 주도록하는 것입니다.

4

파이썬을 고려하십시오. 사용자 정의 오류 처리기로 코덱을 확장 할 수 있으므로 코드화 할 수없는 바이트를 원하는 것으로 바꿀 수 있습니다.

import codecs 
codecs.register_error('spacer', lambda ex: (u' ', ex.start + 1)) 
s = 'spam\xb0\xc0eggs\xd0bacon'.decode('utf8', 'spacer') 
print s.encode('utf8') 

이 인쇄 : 다음 문자가 시작되는 찾기

spam eggs bacon