JSON包含错误的UTF8\u00ce\u00b2而不是Unicode\u03b2,如何在Python中修复?

2024-09-21 01:11:20 发布

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

首先注意符号β(希腊语beta)在UTF-8:CE B2中有十六进制表示

我在Python 2.7中有使用json字符串的遗留源代码:

u'{"something":"text \\u00ce\\u00b2 text..."}'

然后它会打电话json.loads(字符串)或json.loads(字符串,'utf-8'),但结果是带有utf-8字符的Unicode字符串:

^{pr2}$

我想要的是普通的pythonicode(UTF-16?)字符串:

u'text β text'

如果我打电话:

text = text.decode('unicode_escape')

以前json.loads,然后我得到了正确的Unicodeβ符号,但它也破坏了json,因为它还替换了所有新行-\n

问题是,如何只转换"\\u00ce\\00b2"部分而不影响其他json特殊字符?在

(我是Python新手,它不是我的源代码,所以我不知道它应该如何工作。我怀疑代码只适用于ASCII字符)


Tags: 字符串textjson源代码unicode符号字符b2
2条回答

下面是一个字符串修复程序,它在加载JSON之后工作。它处理任何长度的类似UTF-8的序列,并忽略看起来不像UTF-8序列的转义序列。在

示例:

import json
import re

def fix(bad):
    return re.sub(ur'[\xc2-\xf4][\x80-\xbf]+',lambda m: m.group(0).encode('latin1').decode('utf8'),bad)

# 2- and 3-byte UTF-8-like sequences and onen correct escape code.
json_text = '''\
{
  "something":"text \\u00ce\\u00b2 text \\u00e4\\u00bd\\u00a0\\u597d..."
}
'''

data = json.loads(json_text)
bad_str = data[u'something']
good_str = fix(bad_str)
print bad_str
print good_str

输出:

^{pr2}$

也许是这样吧。限制为2字节UTF-8字符。在

import re

j = u'{"something":"text \\u00ce\\u00b2 text..."}'

def decodeu (match):
    u = '%c%c' % (int(match.group(1), 16), int(match.group(2), 16))
    return repr(u.decode('utf-8'))[2:8]

j = re.sub(r'\\u00([cd][0-9a-f])\\u00([89ab][0-9a-f])',decodeu, j)

print(j)

返回示例的{"something":"text \u03b2 text..."}。此时,您可以将其作为常规JSON导入并获得所需的最终字符串。在

^{pr2}$

相关问题 更多 >

    热门问题