2017-10-16 14 views
0

'euc-kr'로 인코딩 된 한국어 텍스트 파일을 파이썬에서 읽으려고했으나 오류가 발생했습니다. encodings 모듈을 잠시 살펴본 후이 모듈이 한국어 문자를 매우 이상하게 인코딩한다는 것을 알게되었습니다. 나를Python은 euc-kr 인코딩 (코덱, 인코딩 모듈)을 사용하여 예상치 못한 방식으로 (한국어) 문자를 인코딩합니다.

이 (AN 거의 사용되지 않는 문자입니다,하지만 난 발음 사전이 필요하는) EUC-KR 사양에 따라 B5 (e)로 인코딩하도록되어 한국어 문자가 (내가 언급 한 예를 보자 this site). 그러나 encodings 모듈은 나에게 다소 다른 결과를 준다. 당신이 볼 수 있듯이 나는 B5 (e)euc_kr.codec.encode 나에게 내가 기대했던 것보다 더 바이트를 제공 디코딩 할 때

# python3 
>> from encodings import euc_kr 
>> euc_kr.codec.decode(b'\xB5\x6E') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'euc_kr' codec cant decode byte 0xb5 in position 0: illegal multibyte sequence 
>> euc_kr.codec.encode('탙') 
(b'\xa4\xd4\xa4\xbc\xa4\xbf\xa4\xbc', 1) 

, 나는 오류가 발생합니다. 나는 거기에 무슨 일이 일어나는지 전혀 모른다. B5 6E (및 다른 많은 한국어 문자)을 디코딩 할 때 오류를 발생시키지 않으려면 어떻게해야합니까? EUC-KR 사양에 대한 또 다른 문서가 있습니까? EUC-KR의 Python 구현이 어떻게 작동하는지 이해하기 위해 읽을 수 있습니까?

+1

예, 이상합니다. 나는 euc 인코딩에 익숙하지 않지만 euc_kr이 1 또는 2 바이트로 각 코드 포인트를 인코딩해야 할 때 euc_kr.codec.encode ('탙')'이 많은 바이트를 생성하는 이유를 모르겠습니다. BTW, 당신은'euc_kr.codec.encode (s)'을 사용할 필요가 없다. 단지's.encode ('euc_kr')'만 할 수있다. –

답변

1

euc_kr 결과가 분해되는 것처럼 보입니다.

윈도우의 기본 한국어 코드 페이지 (코드 페이지 949) EUC-KR의 독점적하지만, 상위 호환 확장 ...

일부 실험 : 당신은 따라 Wikipediacp949을 시도 할 수 있습니다 :

>>> s = '탇' 
>>> ud.name(s) 
'HANGUL SYLLABLE TAD' 
>>> s.encode('euc_kr') 
b'\xa4\xd4\xa4\xbc\xa4\xbf\xa4\xa7' 
>>> s.encode('euc_kr').decode('cp949') 
'ㅤㅌㅏㄷ' 
>>> for c in s.encode('euc_kr').decode('cp949'): 
...  print(ud.name(c)) 
...  
HANGUL FILLER 
HANGUL LETTER THIEUTH 
HANGUL LETTER A 
HANGUL LETTER TIKEUT 
>>> s.encode('cp949').hex() 
'b56e' 
+1

정말 고마워요. 이제는 모든 것이 나에게 분명합니다. 귀하의 정보를 위해서, 각각의 한국인 캐릭터는 조선, 중성 (선택 사항 : 종성)으로 구성되어 있지만 문법은 가능한 모든 조합을 허용하지 않습니다. 예를 들어 '탓'과 '탇'중 한국어 문법은 '탓'만 유효한 한국어 문자로 허용합니다. 그러나 발음 기호와 같이 불규칙한 한국어 문자가 허용되는 경우도 있습니다. 사실, 발음 기호 시스템에서 '탓'은 유효하지 않지만 '탇'는 유효합니다. –