擅长:python、mysql、java
<p>Pierre的答案几乎是正确的,但是对于U+FFFF以上的字符,<code>for x in u'MESSAGE:'</code>位将失败,除了“窄构建”(主要是在Windows上的Python1.6-3.2),它使用UTF-16作为Unicode字符串。在</p>
<p>在'wide builds'(在3.3+中,这种区别已经不存在,<code>len(unichr(0x10000))</code>是<code>1</code>不是{<cd4>}。当这个代码点是UTF-16BE编码的时,会得到两个占用四个字节的代理项,因此输出是<code>'\\uD800DC00'</code>,而不是您可能想要的<code>u'\\uD800\\uDC00'</code>。在</p>
<p>要在Python的两个变体上覆盖它,可以执行以下操作:</p>
<pre><code>>>> h = u'MESSAGE:\U00010000'.encode('utf-16be').encode('hex')
# '004d004500530053004100470045003ad800dc00'
>>> ''.join(r'\u' + h[i:i+4] for i in range(0, len(h), 4))
'\\u004d\\u0045\\u0053\\u0053\\u0041\\u0047\\u0045\\u003a\\ud800\\udc00'
</code></pre>