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 char,十六进制值 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 列表直接导入我的代码中?

4

1 回答 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'
于 2014-05-16T18:36:54.703 回答