关于编解码器和utf8的python noob问题

2024-03-28 17:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

用python把它挑了几块那么肯定是个傻瓜?但在这里看不到令人满意的答案。在

我有一个json utf-8文件,其中一些片段有grave的,accute的等等。。。。我使用的是编解码器(例如):

str=codecs.open('../../publish_scripts/locations.json', 'r','utf-8')
locations=json.load(str)

for location in locations:
    print location['name']

对于印刷,有什么特别需要做的吗?它给了我以下信息
ascii'codec无法在位置5编码字符u'\xe9'

看起来是e-accute的正确utf-8值。我怀疑我在打印方面出了问题。迭代会导致它失去utf-8'ness吗?在

PHP和Ruby版本可以很好地处理utf-8;这些语言中是否存在python无法做到的松散性?在

泰铢


Tags: 文件答案json编解码器scriptslocationopenpublish
3条回答

你可能读得对。打印时出错。Python尝试将unicode字符串转换为ascii,但在位置5处的字符上失败。在

试试这个:

print location['name'].encode('utf-8')

如果您的终端设置为期望utf-8格式的输出,这将正确打印。在

在编解码器打开()将使用您提供的编解码器(utf-8)对文件内容进行解码。然后有一个pythonunicode对象(其行为类似于string对象)。在

打印unicode对象将导致使用默认编解码器(通常是ascii)进行隐式(幕后)编码。如果ascii不能对所有存在的字符进行编码,它将失败。在

因此,首先要对其进行编码:

for location in locations:
    print location['name'].encode('utf8')

编辑:

为了您的信息,json.load()实际上接受一个类似文件的对象(这是codecs.open()返回的内容)。此时,您所拥有的既不是字符串也不是unicode对象,而是文件周围的iterable包装器。在

默认情况下,json.load()要求文件为utf8编码,这样可以简化代码片段:

^{pr2}$

它与PHP中的相同。UTF8字符串适合打印。在

相关问题 更多 >