在 Python 中使用 ISO 8859-1 编码字符
Encoding characters with ISO 8859-1 in Python
使用 ord(ch)
您可以获得字符 ch
到 127
的数字代码。是否有 returns 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 的字符串
你仍然可以使用ord()
,但你必须解码它。
像这样:
def char_code(c):
return ord(c.decode('iso-8859-1'))
任何东西都可以获得 ord()
。如您所料,ord(u'')
工作正常,前提是您可以在源代码中正确表示字符,and/or 以已知编码读取它。
您的错误消息含糊地表明 coding: iso-8859-1
实际上不是真的,文件的编码实际上是别的东西(我猜是 UTF-8 或 UTF-16)。
Python中关于字符编码的规范必读是http://nedbatchelder.com/text/unipain.html
当您以 Unicode 字符串开头时,您需要 encode
而不是 decode
。
>>> def char_code(c):
return ord(c.encode('iso-8859-1'))
>>> print char_code(u'à')
224
特别是对于 ISO-8859-1,您甚至根本不需要对其进行编码,因为 Unicode 的前 256 个代码点使用 ISO-8859-1 字符。
>>> print ord(u'à')
224
编辑:我现在明白问题所在了。您给出了一个 source code encoding comment 表示源在 ISO-8859-1 中。但是,我敢打赌您的编辑器实际上使用的是 UTF-8。源代码会被误解,您认为您创建的单字符字符串实际上是两个字符。试试以下方法看看:
print len(u'à')
如果您的编码正确,它将 return 1
,但您的情况可能是 2
.
使用 ord(ch)
您可以获得字符 ch
到 127
的数字代码。是否有 returns 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 的字符串
你仍然可以使用ord()
,但你必须解码它。
像这样:
def char_code(c):
return ord(c.decode('iso-8859-1'))
任何东西都可以获得 ord()
。如您所料,ord(u'')
工作正常,前提是您可以在源代码中正确表示字符,and/or 以已知编码读取它。
您的错误消息含糊地表明 coding: iso-8859-1
实际上不是真的,文件的编码实际上是别的东西(我猜是 UTF-8 或 UTF-16)。
Python中关于字符编码的规范必读是http://nedbatchelder.com/text/unipain.html
当您以 Unicode 字符串开头时,您需要 encode
而不是 decode
。
>>> def char_code(c):
return ord(c.encode('iso-8859-1'))
>>> print char_code(u'à')
224
特别是对于 ISO-8859-1,您甚至根本不需要对其进行编码,因为 Unicode 的前 256 个代码点使用 ISO-8859-1 字符。
>>> print ord(u'à')
224
编辑:我现在明白问题所在了。您给出了一个 source code encoding comment 表示源在 ISO-8859-1 中。但是,我敢打赌您的编辑器实际上使用的是 UTF-8。源代码会被误解,您认为您创建的单字符字符串实际上是两个字符。试试以下方法看看:
print len(u'à')
如果您的编码正确,它将 return 1
,但您的情况可能是 2
.