쓰레기통, 쓰레기통 같은데. 다음은 데이터에서 얻은 것을 확인하는 방법에 대한 몇 가지 단서입니다. repr()
및 unicodedata.name()
은 친구입니다.
>>> s = ' mwen bezwen \xc3\xa3 \xc2\xa8 d medikal '
>>> print repr(s.decode('utf8'))
u' mwen bezwen \xe3 \xa8 d medikal '
>>> import unicodedata
>>> unicodedata.name(u'\xe3')
'LATIN SMALL LETTER A WITH TILDE'
>>> unicodedata.name(u'\xa8')
'DIAERESIS'
>>>
업데이트 :
하는 경우 (같은 A.의 N.다른 의미는 패키지가 출력 언어를 무작위로 선택하게하고 그 선택이 의심 스럽다고 생각합니다. 한국의 (a)는 여기에 .... 우리의 (b) 해당 언어 관련이 코덱을 사용하여 출력을 디코딩하려고 말해 한국뿐 아니라 두 개의 중국, 일본의 각, 러시아어 없습니다 :
>>> s = ' mwen bezwen \xc3\xa3 \xc2\xa8 d medikal '
>>> for enc in 'euc-kr big5 gb2312 shift-jis euc-jp cp1251 koi8-r'.split():
print enc, s.decode(enc)
euc-kr mwen bezwen 찾 짢 d medikal
big5 mwen bezwen 瓊 穡 d medikal
gb2312 mwen bezwen 茫 篓 d medikal
shift-jis mwen bezwen テ」 ツィ d medikal
euc-jp mwen bezwen 達 即 d medikal
cp1251 mwen bezwen ГЈ ВЁ d medikal
koi8-r mwen bezwen цё б╗ d medikal
>>>
매우 그럴듯한 것은 없습니다. 정말로, 특히 koi8-r. 추가 제안 : 인터페이스 패키지의 문서를 검사하십시오 (URL 제발!) ... 인코딩에 대해 무엇을 말합니까? 두 언어 중 어느 것을 시도하고 있습니까? "mwen bezwen"은 예상되는 출력 언어에서 의미가 있습니까? 훨씬 더 큰 텍스트 샘플을 시도해보십시오 - Chardet은 여전히 UTF-8을 나타 냅니까? 더 큰 출력물이 예상되는 출력 언어에서 의미가 있습니까? ASCII 만 사용하는 다른 언어로 영어를 번역 해보십시오. 의미있는 ASCII 출력을 얻을 수 있습니까? 파이썬 코드와 swig 인터페이스 코드를 알려주시겠습니까?
업데이트 2 정보 흐름이 재미있다 : "문자열 처리 응용 프로그램"-> "통계 번역 시스템"- 아이티 도울> "기계 번역 시스템 (오픈 소스/자유 소프트웨어) (crisiscommons.org
: 모두 Google Translate (alpha) 및 Microsoft Translate (beta)에서 얻은
Input language: English (guess)
Output language: Haitian Creole
Operating system: linux
Python version: unknown
C++ package name: unknown
C++ package URL: unknown
C++ package output encoding: unknown
Test 1 input: unknown
Test 1 expected output: unknown
Test 1 actual output (utf8): ' mwen bezwen \xc3\xa3 \xc2\xa8 d medikal '
[Are all of those internal spaces really in the string?]
Test 2 input: 'I need medical aid.'
Test 2 expected output (utf8): 'Mwen bezwen \xc3\xa8d medikal.'
Test 2 actual output (utf8): unknown
시험 2) 다음에 사실로 "알 수없는"
교체 시도하십시오 ".
세 번째 단어는 GRAVE (U + 00E8) 다음에 'd'가있는 라틴 소문자 E입니다.
업데이트 3
당신은 ""말했다 :
는 가정 "" "입력 UTF8은 (어쩌면, 난 내 파일의 몇 가지 잘못 그들에 텍스트를 코드화 된 것 같아)"(당신이했습니다 언급 결코이 명시 적으로) 모든 파일을 UTF-8로 인코딩되어야한다 :
정렬 EN-FR-HT 영장의 zip 파일이 하나가 UTF-8로 디코딩을 시도 충돌 몇 가지 파일이 있습니다.
이런 일이 발생하는 이유
진단 :
chardet는 쓸모가 (이 경우); 그것은 오랫동안 약 faffs 및 80-90 pct의 신뢰 수준으로 ISO-8859-2 (동유럽 일명 Latin2)의 추측으로 돌아옵니다.
다음 단계 : ht-en 디렉토리를 선택하십시오 (ht는 fr보다 강조된 문자를 사용하므로 어떤 일이 일어나는지 쉽게 알 수 있습니다).
기대 : e-grave는 추정 된 ht 텍스트 (웹 사이트, CMU 파일)의 가장 빈번한 비 ASCII 문자입니다. 다음 번 O-grave의 약 3 배입니다. 세 번째로 빈번한 노이즈는 소음에서 사라집니다.
파일 hten.txt의 비 ASCII 바이트가 포함됩니다.5 위 :
최초의 2 행은 라틴 포함하거나 CP1252는 (물을 보유하지 않는
e-grave is 8a in old Western Europe DOS encodings like cp850!!
o-grave is 95 in old Western Europe DOS encodings like cp850!!
99164 approx == 3 * 27682
설명에 의해 설명되는 마지막 세 행이
e-grave is c3 a8 in UTF-8
o-grave is c3 b2 in UTF-8
2159 + 6004 approx == 8210
6004 approx == 3 * 2159
에 의해 설명된다
8a 99164
95 27682
c3 8210
a8 6004
b2 2159
8a는 latin1의 제어 문자이고 8a는 cp1252의 S-caron입니다.
내용을 살펴보면 파일이 여러 원본 파일, 일부 UTF-8, 하나 이상의 cp850 (또는 이와 유사한 파일)의 집계임을 알 수 있습니다. 범인은 성경 인 것처럼 보입니다 !!!
인코딩의 혼합은 왜 Chardet이 고투하는지 설명합니다.
제안 :
(1) 모든 입력 파일에 인코딩 검사 구현. 국경 통제와 같이 UTF-8로 바로 변환해야합니다.
(2) 릴리스 전에 UTF-8 디코딩 가능성을 확인하는 스크립트를 구현하십시오.
(3) 성경 본문의 정형어가 웹 사이트와 다른 것으로 보입니다 (더 많은 아포스트로피). 당신은 당신의 코퍼스가 다른 철자법에 의해 왜곡되고 있는지를 당신의 크리올 전문가들과 토론하기를 원할지도 모릅니다. 누룩을 넣지 않은 빵과 굵은 베를 많이 사용하기를 기대하십니까 & 유골? 참고 cp850 물건은 약 90 %의 집적에 나타납니다. 어떤 성경은 괜찮을 지 모르지만 90 %는 정상에있는 것처럼 보입니다.
(4) Moses가 비 UTF-8 입력에 대해 불평하지 않는 이유는 무엇입니까? 가능성 : (1) 원시 바이트로 작업하고 있습니다. 즉, 유니 코드로 변환하지 않습니다. (2) 유니 코드로 변환하려고 시도하지만 자동으로 오류를 무시합니다 .- (
특정 인코딩을 결정하는 데 도움이된다고 생각합니다. 문자열은 파이썬에서 반환되는 repr()이 무엇인지 알려주는 것입니다. – Jorenko
repr() 출력 : 'mwen bezwen \ xc3 \ xa3 \ xc2 \ xa8 d medikal' –
예상 결과가 무엇인지 알고 있으면 도움이됩니다. . 가 UnicodeDecodeError가 : 'ASCII'코덱 위치 13 바이트 0xc3을 디코딩 할 수 있어야했다 –