使用Python将Unicode编码转换为iso8859-15

3
我正在使用Python 2.7.6,试图将基本的Unicode字符串转换为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)

在这种情况下,"ü"是一个有效的iso8859-15字符,其十六进制值为fc或二进制的11111100。 在"C:\Python27\lib\encodings\iso8859_15.py"中查看,第300行的值为FC。
    47:  decoding_table = (
    48:  u'\x00'     #  0x00 -> NULL
    .....
    300: u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS 

我该如何将包含非ASCII字符(例如"ü")的Unicode字符串转换为 'iso8859-15' 编码? 如果函数 encode 在此情况下无法使用:我该如何直接导入 lib\encodings\iso8859_15.py 中的 encoding_table 列表到我的代码中?

1个回答

7
你正试图编码一个字节字符串。由于该字节字符串已经被编码,因此Python 会尝试首先解码它,以便再次进行编码,而且它将使用ASCII进行编码。
异常反映了这一点;你得到了一个UnicodeDecodeError,而不是UnicodeEncodeError。
要创建Unicode值,请使用u'...' Unicode字面量代替:
>>> a = u'ü'
>>> a
u'\xfc'
>>> a.encode('iso8859-15')
'\xfc'

或者使用有效的编码将字节串数据解码为Unicode:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接