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

Posted

技术标签:

【中文标题】在 Python 中使用 ISO 8859-1 编码字符【英文标题】:Encoding characters with ISO 8859-1 in Python 【发布时间】:2015-08-20 16:45:49 【问题描述】:

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

【问题讨论】:

【参考方案1】:

当您以 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

【讨论】:

我尝试了你建议的两种方法,但我仍然得到同样的错误。 @DrimadesBoy 那么您的示例不正确,请使用实际演示错误的代码对其进行更新。 已解决。我在 Ubuntu 中使用 Geany,并从 Document > Set Encoding > Western European > ISO-8859-1 将文件编码从“utf-8”更改为“iso-8859-1” @DrimadesBoy 如果已解决,请使用复选框,以便每个人都知道。一个upvote会很好。【参考方案2】:

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

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

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

【讨论】:

也许可以查看character-encoding tag wiki 以获得一些提示。【参考方案3】:

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

像这样:

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

【讨论】:

使用 print char_code(u'?') 我得到:第 4 行文件 unicode.py 中的非 ASCII 字符 '\xf0',但没有编码声明; 此字符在 ISO-8859-1 中不存在,check the table。 你应该指定一个encoding header。 错误信息表明coding: 标头错误。如果您声明 ISO-8859-1 编码,但文件的实际编码是 UTF-8(或 UTF16),这就是您所期望的错误消息。

以上是关于在 Python 中使用 ISO 8859-1 编码字符的主要内容,如果未能解决你的问题,请参考以下文章

Python ISO-8859-1 编码

python 编码问题

如何使用编码 ISO-8859-1 在 PHP 中编写文件? [复制]

在 Jboss 上使用 ISO-8859-1 编码和 JSF 2

python中把ISO-8859-1编码转化为UTF-8

如何使用 iso_8859-1 在 C 程序中输出度数符号?