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

7

使用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'à')

我遇到一个错误: 类型错误:ord()函数期望的是一个字符,但却发现了长度为2的字符串。
3个回答

2
当你开始使用Unicode字符串时,你需要进行编码而不是解码。
>>> 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

编辑:现在我明白问题了。你给出了一个源代码编码注释,表明源代码采用的是ISO-8859-1编码。但是,我敢打赌你的编辑器实际上是使用UTF-8的。这将导致源代码被错误地解析,而你认为创建的单字符字符串实际上将成为两个字符。尝试以下操作以查看:
print len(u'à')

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

我尝试了你建议的两种方法,但我仍然得到相同的错误。 - Drimades Boy
@DrimadesBoy,那么你的示例是不正确的,请使用能够真正演示错误的代码进行更新。 - Mark Ransom
问题解决了。我在Ubuntu上使用Geany,并将文件编码从'utf-8'更改为'iso-8859-1',方法是从“文档”>“设置编码”>“西欧”>“ISO-8859-1”。 - Drimades Boy
@DrimadesBoy 如果问题已经解决,请使用复选框,这样每个人都知道了。并且点赞也是不错的。 - Mark Ransom

1
你可以使用 ord() 函数获取任何字符的编码。正如你所期望的那样,ord(u'') 可以很好地工作,前提是你能够正确地表示该字符并/或在已知编码中读取它。
你的错误信息模糊地暗示了 coding: iso-8859-1 实际上并不正确,文件的编码实际上是其他编码(我猜测是 UTF-8 或 UTF-16)。
Python 中关于字符编码的规范必读文章是 http://nedbatchelder.com/text/unipain.html

也许可以查看character-encoding标签wiki获取一些提示。 - tripleee

0

你仍然可以使用ord(),但你需要对其进行解码。

像这样:

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

1
使用 print char_code(u'') 我得到了以下信息:文件unicode.py中第4行出现了非ASCII字符'\xf0',但没有声明编码方式; - Drimades Boy
这个字符在ISO-8859-1中不存在,请查看表格 - Rafael Telles
1
你应该指定一个编码头 - Rafael Telles
错误信息表明 coding: 标头有误。如果您声明了 ISO-8859-1 编码,但实际文件的编码是 UTF-8(或UTF16),那么这就是您所期望的错误消息。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接