Python中使用Unicode对象创建JSON时的编码问题

2024-05-16 15:38:26 发布

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

在将字符串编码/解码为特定字符集(UTF-8)时,我遇到了一些实际问题。在

我的Unicode对象是:

>> u'Valor Econ\xf4mico - Opini\xe3o'

当我从python调用print时,它返回:

^{pr2}$

当我从unicode对象调用.encode(“utf-8”)将其写入JSON时,它返回:

>> 'Valor Econ\xc3\xb4mico - Opini\xc3\xa3o'

我做错什么了?print()到底在做什么我没有做的事?在

Obs:我从一个文件的一行创建这个unicode对象。在

import codecs
with codecs.open(path, 'r') as local_file:
    for line in local_file:
        obj = unicode((line.replace(codecs.BOM_UTF8, '')).replace('\n', ''), 'utf-8')

Tags: 对象字符串编码locallineunicodereplaceutf
1条回答
网友
1楼 · 发布于 2024-05-16 15:38:26

Valor Econ\xc3\xb4mico - Opini\xc3\xa3o是为非UTF-8终端准备的UTF-8表示,可能是在交互式shell中。如果您要将此文件写入文件(open("myfile", "wb").write("Valor Econ\xc3\xb4mico - Opini\xc3\xa3o"),那么您将拥有一个有效的UTF-8文件。在

要从文件创建Unicode字符串,可以在io模块中使用自动解码(Codecs.open()不推荐使用)。BOM表将自动删除:

import io
with io.open(path, "r", encoding="utf-8") as local_file:
    for line in local_file:
        unicode_obj = line.strip()

在创建JSON响应时,使用来自json.dumps(my_object)的结果。它将返回一个str,其中包含使用Unicode码位编码的所有非ASCII字符。在

相关问题 更多 >