<p>假设原始字符串的类型为<code>str</code>,则具有以下原始字符串(文字长度为4个转义码,而不是表示1字节的实际转义码):</p>
<pre><code>s = r"b'x\x9c\xabV*HL\xd1\xcd\xccK\xcbW\xb2RPJ\xcb\xcfOJ,R\xaa\x05\x00T\x83\x07b'"
</code></pre>
<p>如果删除前导的<code>b'</code>和<code>'</code>,则可以使用<code>latin1</code>编码转换为字节<code>latin1</code>是Unicode代码点到字节值的1:1映射,因为前256个Unicode代码点表示<code>latin1</code>字符集:</p>
<pre><code>>>> s[2:-1].encode('latin1')
b'x\\x9c\\xabV*HL\\xd1\\xcd\\xccK\\xcbW\\xb2RPJ\\xcb\\xcfOJ,R\\xaa\\x05\\x00T\\x83\\x07b'
</code></pre>
<p>这现在是一个字节字符串,但包含文字转义码。现在应用<code>unicode_escape</code>编码将实际代码点转换回<code>str</code>:</p>
<pre><code>>>> s2 = b.decode('unicode_escape')
>>> s2
'x\x9c«V*HLÑÍÌKËW²RPJËÏOJ,Rª\x05\x00T\x83\x07b'
</code></pre>
<p>这现在是一个Unicode字符串,带有代码点,但我们仍然需要一个字节字符串。再次使用<code>latin1</code>编码:</p>
<pre><code>>>> b2 = s2.encode('latin1')
>>> b2
b'x\x9c\xabV*HL\xd1\xcd\xccK\xcbW\xb2RPJ\xcb\xcfOJ,R\xaa\x05\x00T\x83\x07b'
</code></pre>
<p>一步:</p>
<pre><code>>>> s = r"b'x\x9c\xabV*HL\xd1\xcd\xccK\xcbW\xb2RPJ\xcb\xcfOJ,R\xaa\x05\x00T\x83\x07b'"
>>> b = s[2:-1].encode('latin1').decode('unicode_escape').encode('latin1')
>>> b
b'x\x9c\xabV*HL\xd1\xcd\xccK\xcbW\xb2RPJ\xcb\xcfOJ,R\xaa\x05\x00T\x83\x07b'
</code></pre>
<p>此示例数据似乎是一个zlib压缩的JSON字符串:</p>
<pre><code>>>> import zlib,json
>>> json.loads(zlib.decompress(b))
{'pad-info': 'foobar'}
</code></pre>