python3编码得到中文_Python3中如何得到Unicode码对应的中文?

建议:当 response 是 json 格式的时候,使用

json.dumps(response, ensure_ascii=False)

如果 response 是字符串,就先json.loads,再json.dumps。

尽量不要像其他答主提到的那样,更换编码类型。原因在于,一旦 encode 和 decode 的编码类型不同,很可能就没法再使用json.loads解析了。(我遇到的坑)

代码:

import json

def try_json_loads(s):

try:

print('[INFO] json.loads() Success:', json.loads(s))

except Exception as e:

print('[ERROR] json.loads() Failed:', e)

def test(a):

print('-' * 70)

print('raw dict data:', a)

b = json.dumps(a)

print('after json.dumps():', b)

c = b.encode('utf8').decode('unicode_escape')

print('\n(1) .encode(utf8).decode(unicode_escape):\n>>>', c)

try_json_loads(c)

d = c.encode('unicode_escape').decode('utf8')

print('\n(2) after step 1, .encode(unicode_escape).decode(utf8):\n>>>', d)

try_json_loads(d)

test({'a': '\n'})

test({'a': '·'})

test({'a': '"'})

输出:

----------------------------------------------------------------------

raw dict data: {'a': '\n'}

after json.dumps(): {"a": "\n"}

(1) .encode(utf8).decode(unicode_escape):

>>> {"a": "

"}

[ERROR] json.loads() Failed: Invalid control character at: line 1 column 8 (char 7)

(2) after step 1, .encode(unicode_escape).decode(utf8):

>>> {"a": "\n"}

[INFO] json.loads() Success: {'a': '\n'}

----------------------------------------------------------------------

raw dict data: {'a': '·'}

after json.dumps(): {"a": "\u00b7"}

(1) .encode(utf8).decode(unicode_escape):

>>> {"a": "·"}

[INFO] json.loads() Success: {'a': '·'}

(2) after step 1, .encode(unicode_escape).decode(utf8):

>>> {"a": "\xb7"}

[ERROR] json.loads() Failed: Invalid \escape: line 1 column 8 (char 7)

----------------------------------------------------------------------

raw dict data: {'a': '"'}

after json.dumps(): {"a": "\""}

(1) .encode(utf8).decode(unicode_escape):

>>> {"a": """}

[ERROR] json.loads() Failed: Expecting ',' delimiter: line 1 column 9 (char 8)

(2) after step 1, .encode(unicode_escape).decode(utf8):

>>> {"a": """}

[ERROR] json.loads() Failed: Expecting ',' delimiter: line 1 column 9 (char 8)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值