一个字符串变量有时包括八进制字符,需要取消八进制。例如。
oct_var = "String\302\240with\302\240octals"
,
oct_var
的值应该是
"String with octals"
,并带有非断裂空格。
Codecs
不支持八进制,我也没能用
encode()
找到一个有效的解决方案。这些字符串源自我控制之外的上游。
Python 3.9.8
编辑补充。 它不一定要有规模,也不一定要有超快的速度,所以也许这个想法从 here (#6)可以工作(还没有测试)。
def decode(encoded):
for octc in (c for c in re.findall(r'\\(\d{3})', encoded)):
encoded = encoded.replace(r'\%s' % octc, chr(int(octc, 8)))
return encoded.decode('utf8')