SQL * Loader를 사용하여 데이터를로드하는 동안 Perl 스크립트를 사용하여 조작 된 UTF-8 문자를 찾아 공백으로 대체하려고합니다. 어떻게해야합니까?형식이 잘못된 UTF 문자를 감지하는 방법
10
A
답변
1
편집 : (SQL 로더에 대한 제거 비트는 더 이상 관련이 없을 것 같은.)
하나의 문제는 잘못된 UTF-8 문자의 "끝"으로 간주 어떤 작업을 될 것입니다. 불법적 인 내용은 쉽게 말할 수 있지만, 다음 법적 성격이 시작되는 곳은 분명하지 않을 수 있습니다.
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
은 간단합니다 - 즉, UTF-8의 디자인에 대한 아주 멋진 것들 중 하나입니다. http://tools.ietf.org/html/rfc3629 –
올바른 형식의 UTF-8 만 쉽게 사용할 수 있습니다. 중복되는 리드 바이트가 삽입되었다고 상상해보십시오. 첫 번째 발생을 건너 뛰어야합니다. UTF-8 규칙을 따랐 으면 다음 문자는 선두 바이트가 복제 된 문자의 마지막 바이트로 시작하는 것처럼 보입니다. – MSalters
@MSalters : 그건 내가 생각하고있는 종류의 것이지만, 나 자신만으로는 충분하지 않다. :) –