繁体   English   中英

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

[英]JSON contains incorrect UTF-8 \u00ce\u00b2 instead of Unicode \u03b2, how to fix in Python?

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

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

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

然后,我调用json.loads(string)或json.loads(string,'utf-8'),但结果是带有UTF-8字符的Unicode字符串:

u'text \xce\xb2 text'

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

u'text β text'

如果我打电话给:

text = text.decode('unicode_escape')

在json.loads之前,那么我得到了正确的Unicodeβ符号,但是它也通过替换所有新行来破坏json- \\n

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

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

大概是这样的。 限于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 \β text..."} 此时,您可以将其导入为常规JSON并获取所需的最终字符串。

result = json.loads(j)

这是一个字符串修复程序,在加载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

输出:

text β text ä½ 好...
text β text 你好...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM