Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何处理unicode文本_Python_Unicode - Fatal编程技术网

Python如何处理unicode文本

Python如何处理unicode文本,python,unicode,Python,Unicode,我正在使用Python 2.6.6 item = {u'snippet': {u'title': u'How to Pronounce Canap\xe9'}} title = item['snippet']['title'] print title 结果: How to Pronounce Canapé 预期结果: How to Pronounce Canapé 这看起来像是一个Unicode问题,我尝试了对utf8进行编码和解码,但结果还是一样,有什么想法吗?这很可能是由于Pytho

我正在使用Python 2.6.6

item = {u'snippet': {u'title': u'How to Pronounce Canap\xe9'}}
title = item['snippet']['title']
print title
结果:

How to Pronounce Canapé
预期结果:

How to Pronounce Canapé

这看起来像是一个Unicode问题,我尝试了对utf8进行编码和解码,但结果还是一样,有什么想法吗?

这很可能是由于Python使用的默认编码与控制台的编码不匹配。看起来Python假设编码为UTF-8,但控制台将其解释为拉丁语-1。

这很可能是由于Python使用的默认编码与控制台的编码不匹配。看起来Python假定编码为UTF-8,但控制台将其解释为拉丁语-1。

如果可能,请使用
\u00e9
,而不是
\xe9
。然后在输出unicode字符串时选择适当的编码:

print title.encode('latin1')
什么样的编码是合理的取决于输出到哪里。通常,您必须从环境变量中推断,或者让用户在配置文件中进行选择


PS:如果您经常处理Unicode字符串,我建议您尽可能切换到Python 3(例如3.3)。Unicode处理更清晰/明确/合理。

如果可能,请使用
\u00e9
而不是
\xe9
。然后在输出unicode字符串时选择适当的编码:

print title.encode('latin1')
什么样的编码是合理的取决于输出到哪里。通常,您必须从环境变量中推断,或者让用户在配置文件中进行选择


PS:如果您经常处理Unicode字符串,我建议您尽可能切换到Python 3(例如3.3)。Unicode处理更加清晰/明确/合理。

我在我的终端中得到了您期望的输出(使用python 2.7.7) 您期望的格式取决于终端中设置的编码。对我来说,设置为“cp437”

>>> import sys
>>> sys.stdin.encoding
'cp437'
>>> sys.stdout.encoding
'cp437'
您可以通过以下方式验证是否获得正确的输出:

print title.encode('cp437')

我在我的终端中获得了您的预期输出(使用python 2.7.7) 您期望的格式取决于终端中设置的编码。对我来说,设置为“cp437”

>>> import sys
>>> sys.stdin.encoding
'cp437'
>>> sys.stdout.encoding
'cp437'
您可以通过以下方式验证是否获得正确的输出:

print title.encode('cp437')

${pythondir}/lib/site packages/
中的sitecustomize.py文件中将默认编码设置为
iso-8859-1

import sys
sys.setdefaultencoding('iso-8859-1')

对我来说,它使用
\xe9

${pythondir}/lib/site packages/
中的sitecustomize.py文件中将默认编码设置为
iso-8859-1

import sys
sys.setdefaultencoding('iso-8859-1')

对我来说,它使用的是
\xe9

您的终端期望的
UTF-8

$ locale charmap
UTF-8 
>>> sys.stdout.encoding
UTF-8
Python使用UTF-8打印:

$ locale charmap
UTF-8 
>>> sys.stdout.encoding
UTF-8

将SecureCRT设置更改为接受UTF-8。

您的终端需要UTF-8:

$ locale charmap
UTF-8 
>>> sys.stdout.encoding
UTF-8
Python使用UTF-8打印:

$ locale charmap
UTF-8 
>>> sys.stdout.encoding
UTF-8


更改SecureCRT设置以接受UTF-8。

该代码示例在我的终端中运行良好。我必须假设这是操作系统或终端的问题。您使用的是什么操作系统/终端软件?如何运行此代码?@BenEchols,操作系统是CentOS 6.4,终端是SecureCRT 4。0@BurhanKhalid,在命令行上键入python,这将我放入python外壳检查SecureCRT会话的编码,并确保其UTF8而不是拉丁语-1或类似的。该代码示例在我的终端中运行良好。我必须假设这是操作系统或终端的问题。您使用的是什么操作系统/终端软件?如何运行此代码?@BenEchols,操作系统是CentOS 6.4,终端是SecureCRT 4。0@BurhanKhalid,在命令行上键入python,这将我放入python外壳检查SecureCRT会话的编码,并确保其为UTF8而不是拉丁语-1或类似。我无法将\xe9更改为\u00e9,\xe9是来自YouTube APIOk的原始数据,这对于Python2.7来说并不重要。从您显示的输出来看,我认为
'latin1'
可能是您案例中正确的编码。@ChristianAichinger:
u'\xe9'==u'\u00e9'
,因此更改它不会有帮助。更改
SecureCRT
以匹配CentOS上的终端设置,而不是
.encode('latin1')
。如果
sys.stdout.encoding
是正确的(它匹配
$LC\u TYPE
$LANG
),那么使用Python3就不会正确help@J.F.Sebastian,当我将值写入文件系统上的文件时,我遇到了相同的错误,这是否表明问题不是安全的?@davidjhp:写入文件与写入终端不同。如果输出被重定向到一个文件,您可以使用
pythonionecoding
控制标准输出编码。通过打印输出(repr(打开(“您的输出文件”,“rb”).read())?我无法将\xe9更改为\u00e9,该\xe9是来自YouTube APIOk的原始数据,这对Python2.7来说应该无关紧要。从您显示的输出来看,我认为
'latin1'
可能是您案例中正确的编码。@ChristianAichinger:
u'\xe9'==u'\u00e9'
,因此更改它不会有帮助。更改
SecureCRT
以匹配CentOS上的终端设置,而不是
.encode('latin1')
。如果
sys.stdout.encoding
是正确的(它匹配
$LC\u TYPE
$LANG
),那么使用Python3就不会正确help@J.F.Sebastian,当我将值写入文件系统上的文件时,我遇到了相同的错误,这是否表明问题不是安全的?@davidjhp:写入文件与写入终端不同。如果输出被重定向到一个文件,您可以使用
pythonionecoding
控制标准输出编码。使用打印输出(repr(打开(“您的输出文件”,“rb”).read())?AttributeError:“模块”对象没有属性”setdefaultencodi@davidjhp:不要这样做。从
'ascii'
更改
sys.getdefaultencoding()
可能会以一种微妙的方式破坏系统上的其他Python脚本。AttributeError:'module'对象没有属性'setdefaultencodi@davidjhp:不要这样做。正在更改sys.getdefaultencoding()