我使用的是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列表直接导入到我的代码中?
答案 0 :(得分:6)
您正在尝试编码字节字符串。 bytestring已经被编码,因此Python会尝试首先解码,以便再次对其进行编码,并且它将使用ASCII来执行此操作。
异常反映了这一点;你有一个UnicodeDecodeError
,而不是UnicodeEncodeError
。
要创建unicode值,请改用u'...'
unicode文字:
>>> a = u'ü'
>>> a
u'\xfc'
>>> a.encode('iso8859-15')
'\xfc'
或使用有效编码将您的bytestring数据解码为Unicode:
>>> a = 'ü'
>>> a.decode('utf8') # my terminal is configured to use UTF-8
u'\xfc'
>>> a.decode('utf8').encode('iso8859-15')
'\xfc'