在Python中,Unescape unicodescape,但不包括回车和换行

2024-10-01 13:24:43 发布

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

我有一个ASCII编码的JSON文件,带有unicode转义符(例如,\\u201cquotes\\u201d)和在字符串中转义的换行符(例如,`"foo\\r\\nbar")。Python中有没有一种简单的方法来生成utf-8编码的文件,方法是取消对unicode转义符的转义,但保留换行转义符的完整性?在

对字符串调用decode('unicode-escape')将解码unicode转义符(这是我想要的),但它也将解码回车和换行符(我不想要)。在


Tags: 文件方法字符串json编码fooasciiunicode
1条回答
网友
1楼 · 发布于 2024-10-01 13:24:43

当然有,使用适合作业的工具并要求^{} module将数据解码为Python unicode;然后将结果编码为UTF-8:

import json

json.loads(input).encode('utf8')

仅对实际的Python字符串文本使用unicode-escape。JSON字符串与Python字符串不同,尽管乍一看,它们看起来非常相似。在

简短的演示(考虑到python交互式解释器将字符串作为文本进行回显):

^{pr2}$

注意,JSON解码器对\r进行解码,就像python文本一样。在

如果您绝对要只处理JSON输入中的\uabcdunicode文本,而保留其余内容,则需要使用正则表达式:

import re

codepoint = re.compile(r'(\\u[0-9a-fA-F]{4})')
def replace(match):
    return unichr(int(match.group(1)[2:], 16))

codepoint.sub(replace, text).encode('utf8')

它给出了:

>>> codepoint.sub(replace, r'\u201cquotes\u201d').encode('utf8')
'\xe2\x80\x9cquotes\xe2\x80\x9d'
>>> codepoint.sub(replace, r'"foo\r\nbar"').encode('utf8')
'"foo\\r\\nbar"'

相关问题 更多 >