在 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)
,您可以获得字符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 的字符串
【问题讨论】:
【参考方案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 编码字符的主要内容,如果未能解决你的问题,请参考以下文章
如何使用编码 ISO-8859-1 在 PHP 中编写文件? [复制]