在 Python 中使用 ISO 8859-1 编码字符

Encoding characters with ISO 8859-1 in Python

使用 ord(ch) 您可以获得字符 ch127 的数字代码。是否有 returns 0-255 之间的数字的函数,以便也覆盖 ISO 8859-1 个字符?
编辑: 按照我上一版本的代码和我得到的错误

#!/usr/bin/python
# coding: iso-8859-1

import sys
reload(sys)
sys.setdefaultencoding('iso-8859-1')
print sys.getdefaultencoding()  # prints "iso-8859-1" 

def char_code(c):
    return ord(c.encode('iso-8859-1'))
print char_code(u'à')

我收到一个错误: 类型错误:ord() 需要一个字符,但找到了长度为 2 的字符串

你仍然可以使用ord(),但你必须解码它。

像这样:

def char_code(c):
    return ord(c.decode('iso-8859-1'))

任何东西都可以获得 ord()。如您所料,ord(u'') 工作正常,前提是您可以在源代码中正确表示字符,and/or 以已知编码读取它。

您的错误消息含糊地表明 coding: iso-8859-1 实际上不是真的,文件的编码实际上是别的东西(我猜是 UTF-8 或 UTF-16)。

Python中关于字符编码的规范必读是http://nedbatchelder.com/text/unipain.html

当您以 Unicode 字符串开头时,您需要 encode 而不是 decode

>>> def char_code(c):
        return ord(c.encode('iso-8859-1'))

>>> print char_code(u'à')
224

特别是对于 ISO-8859-1,您甚至根本不需要对其进行编码,因为 Unicode 的前 256 个代码点使用 ISO-8859-1 字符。

>>> print ord(u'à')
224

编辑:我现在明白问题所在了。您给出了一个 source code encoding comment 表示源在 ISO-8859-1 中。但是,我敢打赌您的编辑器实际上使用的是 UTF-8。源代码会被误解,您认为您创建的单字符字符串实际上是两个字符。试试以下方法看看:

print len(u'à')

如果您的编码正确,它将 return 1,但您的情况可能是 2.