如何将带有转义字符的 ASCII 字符串转换为其等效的 unicode


# coding=ascii
bad_string = 'x9a'
expected = u'š'
good_string = bad_string.decode('unicode-escape').encode('utf-8')
if good_string != expected:
raise AssertionError()

我希望上述测试能够通过,但是我收到以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

我在这里错过了什么?

(我不能简单地将bad_string更改为 unicode。 这些是从外部源到达的字符串(

'x9a'

中没有任何转义字符。转义是字符串文本的一部分,表示的字节只有一个:[0x9a]。编码可能是Windows-1252,因为这很常见,并且在0x9a处有š,但你真的必须知道它是什么。要解码为 Windows-1252:

good_string = bad_string.decode('cp2512')

如果您实际拥有的是'\x9a'(一个反斜杠,三个其他字符(,那么您需要先将其转换为上述形式。正确的方法取决于逃跑者最初是如何设法到达那里的。如果它来自 Python 字符串文本,请先使用string-escape

good_string = bad_string.decode('string-escape').decode('cp2512')

最新更新