2014-05-16 2 views
2

파이썬 2.7.6을 사용하고 있으며 기본 유니 코드 문자열을 iso8859-15로 변환하려고합니다.유니 코드를 파이썬에서 iso8859-15로 인코딩

비 ASCII 문자가있는 문자열을 변환하려고하면 오류가 발생합니다. 이 존재하지 않을 그 문자가 ISO8859-15 코딩이되면 확인 될 것이다 그러나이 경우에는 그들이 수행

예 :

>>> import codecs 
>>> a = "test" 
>>> a 
'test' 
>>> a.encode ('iso8859-15') 
'test' 
>>> a = "ü" 
>>> a 
'\xfc' 
>>> a.encode ('iso8859-15') 

오류 코드 :

Traceback (most recent call last): 
    File "<pyshell#20>", line 1, in <module> 
    a.encode ('iso8859-15') 
    File "C:\Python27\lib\encodings\iso8859_15.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_table) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 0: ordinal not in range(128) 

을이 경우 "ü"은 16 진수 값이 fc 인 유효한 iso8859-15 char이거나 11111100 이진 값입니다. 에서 찾고 "C : \ Python27 \ lib 디렉토리 \ 인코딩 \ iso8859_15.py"라인 (300)의 값 FC가 :

47: decoding_table = (
    48: u'\x00'  # 0x00 -> NULL 
    ..... 
    300: u'\xfc'  # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS 

가 어떻게에 "ü"와 같은 비 ASCII 문자와 유니 코드 문자열을 변환 할 수 있습니다가 ' iso8859-15 '? 이 경우 함수 인코딩이 작동하지 않는 경우 : lib \ encodings \ iso8859_15.py의 encoding_table 목록을 내 코드로 직접 가져올 수 있습니까?

답변

5

바이트 문자열을 인코딩하려고합니다. bytestring은 이미 인코딩되었으므로 파이썬은 먼저 을 디코드하여 디코딩하므로 다시 인코딩 할 수 있으며이를 위해 ASCII를 사용합니다.

예외는 이것을 반영합니다. 너 UnicodeDecodeError이 아니라 UnicodeEncodeError이 있습니다.

>>> a = u'ü' 
>>> a 
u'\xfc' 
>>> a.encode('iso8859-15') 
'\xfc' 

또는 유효한 인코딩에 사용 유니 bytestring 데이터를 디코딩 :

>>> a = 'ü' 
>>> a.decode('utf8') # my terminal is configured to use UTF-8 
u'\xfc' 
>>> a.decode('utf8').encode('iso8859-15') 
'\xfc' 

대신 u'...' 유니 리터럴 사용 유니 코드 값을 생성하려면
관련 문제