使用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的字符串
答案 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'))