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

时间:2015-08-20 16:45:50

标签: python character-encoding iso-8859-1

使用ord(ch),您可以获得字符ch的数字代码,最高为127。是否有任何函数返回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'à')

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

3 个答案:

答案 0 :(得分:2)

当您使用Unicode字符串开始时,您需要encode而不是decode

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

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

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

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

编辑:我现在看到了问题。您已经提供了source code encoding comment,表明该来源符合ISO-8859-1标准。但是,我打赌你的编辑实际上是在使用UTF-8。源代码将被错误解释,您认为您创建的单字符字符串实际上将是两个字符。请尝试以下方法查看:

print len(u'à')

如果您的编码正确,它将返回1,但在您的情况下,它可能是2

答案 1 :(得分:1)

您可以获得ord()任何内容。正如您所料,ord(u'')可以正常工作,前提是您可以在源中正确表示字符,和/或以已知编码方式读取字符。

您的错误消息含糊地暗示coding: iso-8859-1实际上并非如此,文件的编码实际上是其他内容(我猜是UTF-8或UTF-16)。

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

答案 2 :(得分:0)

您仍然可以使用ord(),但必须对其进行解码。

像这样:

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