【发布时间】:2013-12-11 01:43:45
【问题描述】:
对于 PYTHON 2.7(我拍摄了在 3 中使用 encode 的照片,现在很困惑......希望得到一些建议,如何在 python 3 中复制这个测试......)
对于欧元字符 (€),我使用 this tool 查找了它的 utf8 十六进制代码点。它说它是0x20AC。
对于 Latin1(再次使用 Python2 2.7),我使用 decode 来获取它的 Hex 代码点:
>>import unicodedata
>>p='€'
## notably x80 seems to correspond to [Windows CP1252 according to the link][2]
>>p.decode('latin-1')
>>u'\x80'
然后我对他们两个都使用了这个打印语句,这就是我得到的:
对于 utf8:
>>> print unichr(0x20AC).encode('utf-8')
€
对于 latin-1:
>>> print unichr(0x80).encode('latin-1')
€
到底发生了什么?为什么编码为 utf-8 返回 '‚¬'?另外......似乎 Latin1 十六进制代码点可能与它们的 utf8 对应物不同(我有一位同事认为不同 - 说 Latin1 在这方面就像 ASCII)。但是不同代码点的存在似乎对我有不同的暗示……但是 python 2.7 读取Windows CP1252 'x80' 的原因对我来说是一个真正的谜……这是 latin-1 在 python 2.7 中的标准吗? ?
【问题讨论】:
-
首先,欧元字符的 UTF-8 是
'\xE2\x82\xAC'。在 UTF-8 中,'\x20\xAC'是一个空格,后面跟着一个非法字符。 -
你是说我需要输入'\xe2\x82\xac'??这对我来说没有意义......或python。输入时出现“SyntaxError: invalid syntax”:>>> print unichr('\xe2\x82\xac').encode('utf-8')
-
首先,你没有把引号放进去。其次,
unichr接受一个数字,而不是一个字符串,所以无论如何这都行不通。要将字节字符串转换为unicode,您需要使用decode方法,并指定要转换的编码。所以,print '\xe2\x82\xac'.decode('utf-8').encode('utf-8')会给你……正如你所期望的那样,正是你开始的。 -
抱歉编辑。它说: SyntaxError: invalid syntax
-
那你复制粘贴错了。如果我将确切的代码粘贴到我的 Python 2.7 解释器或像 this one 这样的在线解释器中,则没有
SyntaxError;它在带有 UTF-8 控制台的机器上打印出€,在带有 CP-1252 控制台的机器上打印出€,等等。
标签: python unicode encoding utf-8 latin1