我正在创建一个程序,该程序从API抓取数据并将其存储在我自己的数据库中。问题在于某些字符串在引号应带有的字符代码中存在某种形式。经过进一步检查,它似乎是引号的十六进制代码,但是它被双重转义了,使我与我的所有解码器混淆了。我相信该字符串以ascii的形式出现,其他字符没有其他问题。
我知道我可以简单地用实际字符替换特定的字符代码,但是将来我需要抓住这样的东西。如果是十六进制,则需要梳理十六进制代码的字符串,然后按程序替换它们。
我尝试过
clean_val = unicodedata.normalize('NFKD', val).encode('latin1').decode('utf8')
我对整个事情感到很困惑
response = session.get(url)
if response.status_code == requests.codes.ok:
print(response.content)
b'{"Description":"American Assets Trust, Inc. (the \\\u0093company\\\u0094) is a full service, vertically ..."}'
我认为字符串像\“一样存储在他们的数据库中,以满足某些SQL转义协议。当我得到它时,转义斜杠与字符代码混在一起,从而弄乱了编码。
答案 0 :(得分:0)
这些字符似乎来自编码为cp1252的文本。可以对它们进行解码
>>> bs = b'{"Description":"American Assets Trust, Inc. (the \\u0093company\\u0094) is a full service, vertically ..."}'
>>> d = json.loads(bs)
>>> s = d['Description']
>>> decoded = s.encode('latin-1').decode('cp1252')
>>> decoded
'American Assets Trust, Inc. (the “company”) is a full service, vertically ...'
但是您将不得不使用str.replace
或str.translate
>>> table = str.maketrans('“”', '""')
>>> decoded = s.encode('latin-1').decode('cp1252')
>>> decoded.translate(table)
'American Assets Trust, Inc. (the "company") is a full service, vertically ...'