关于编解码器和utf-8的python noob问题
使用python来挑选一些片段,所以肯定是一个noob?但没有看到令人满意的答案 我有一个json utf-8文件,其中有些片段有grave's、accute's等。。。。我正在使用编解码器,并且(例如): 对于印刷,有什么特别需要做的吗?它给了我以下信息关于编解码器和utf-8的python noob问题,python,utf-8,Python,Utf 8,使用python来挑选一些片段,所以肯定是一个noob?但没有看到令人满意的答案 我有一个json utf-8文件,其中有些片段有grave's、accute's等。。。。我正在使用编解码器,并且(例如): 对于印刷,有什么特别需要做的吗?它给了我以下信息 ascii“编解码器无法对位置5中的字符u'\xe9'进行编码 它看起来是e-accute的正确utf-8值。我怀疑我在打印方面做错了什么。迭代会导致它失去utf-8的特性吗 PHP和Ruby版本可以很好地处理utf-8;这些语言中是否存在p
ascii“编解码器无法对位置5中的字符u'\xe9'进行编码 它看起来是e-accute的正确utf-8值。我怀疑我在打印方面做错了什么。迭代会导致它失去utf-8的特性吗 PHP和Ruby版本可以很好地处理utf-8;这些语言中是否存在python无法做到的松散性
thx与PHP中的相同。UTF8字符串很适合打印。它与PHP中的相同。UTF8字符串很适合打印。codec.open()将使用您提供的编解码器(utf-8)对文件内容进行解码。然后有一个python unicode对象(其行为类似于字符串对象) 打印unicode对象将导致使用默认编解码器(通常为
ascii
)进行隐式(幕后)编码。如果ascii
无法对出现的所有字符进行编码,则将失败
要打印,应首先对其进行编码,因此:
for location in locations:
print location['name'].encode('utf8')
编辑:
对于您的信息,json.load()
实际上获取了一个类似文件的对象(这就是codecs.open()
返回的内容)。此时,您所拥有的既不是字符串也不是unicode对象,而是一个围绕文件的iterable包装器
默认情况下,json.load()
希望文件采用utf8编码,以便简化代码片段:
locations = json.load(open('../../publish_scripts/locations.json'))
for location in locations:
print location['name'].encode('utf8')
open()将使用您提供的编解码器(utf-8)对文件内容进行解码。然后有一个python unicode对象(其行为类似于字符串对象)
打印unicode对象将导致使用默认编解码器(通常为ascii
)进行隐式(幕后)编码。如果ascii
无法对出现的所有字符进行编码,则将失败
要打印,应首先对其进行编码,因此:
for location in locations:
print location['name'].encode('utf8')
编辑:
对于您的信息,json.load()
实际上获取了一个类似文件的对象(这就是codecs.open()
返回的内容)。此时,您所拥有的既不是字符串也不是unicode对象,而是一个围绕文件的iterable包装器
默认情况下,json.load()
希望文件采用utf8编码,以便简化代码片段:
locations = json.load(open('../../publish_scripts/locations.json'))
for location in locations:
print location['name'].encode('utf8')
您可能正在正确读取该文件。打印时发生错误。Python尝试将unicode字符串转换为ascii,但在位置5的字符上失败 请尝试以下方法:
print location['name'].encode('utf-8')
如果您的终端设置为期望以utf-8格式输出,这将正确打印。您可能正确读取了文件。打印时发生错误。Python尝试将unicode字符串转换为ascii,但在位置5的字符上失败 请尝试以下方法:
print location['name'].encode('utf-8')
如果您的终端设置为期望以utf-8格式输出,这将正确打印。对于python2中的非ascii、字符io和一些
site.py
设置,标准io流被中断。基本上,您需要在脚本的早期使用sys.setdefaultencoding('utf8')
(或任何系统语言环境的编码)。ubuntu附带了site.py
,您需要imp.reload(sys)
才能使用sys.setdefaultencoding
。或者,您可以将sys.stdout(以及stdin和stderr)包装为支持unicode的读写器,您可以从codecs.getreader
/getwriter
对于非ascii、python2中的字符io和一些site.py
设置,标准io流被中断。基本上,您需要在脚本的早期使用sys.setdefaultencoding('utf8')
(或任何系统语言环境的编码)。ubuntu附带了site.py
,您需要imp.reload(sys)
才能使用sys.setdefaultencoding
。或者,您可以将sys.stdout(以及stdin和stderr)包装为支持unicode的读写器,您可以从codecs.getreader
/getwriter
中获得这些读写器。没有任何东西会被破坏,依靠更改站点范围的默认编码是一个坏主意。它可能会产生超出脚本范围的后果。最好是直言不讳;输入时解码,输出时编码。在我看来,让print
不适用于字符串是不正确的。在代码中添加编码调用当这正是系统编码的本意时,我发现是多余的。没有任何东西会被破坏,依靠改变站点范围的默认编码是一个坏主意。它可能会产生超出脚本范围的后果。最好是直言不讳;输入时解码,输出时编码。在我看来,让print
不适用于字符串是不正确的。在代码中添加编码调用当这正是系统编码的目的时,我发现冗余。