擅长:python、mysql、java
<blockquote>
<p>I know I can just encode it to UTF-8 and then decode again</p>
</blockquote>
<p>是的,当您有“UCS-4string中的UTF-16代理”输入时,这是解决问题的常用习惯用法。但正如机械蜗牛说的,这个输入是畸形的,你应该优先修复产生它的任何东西。在</p>
<blockquote>
<p>is there a more straightforward/efficient way?</p>
</blockquote>
<p>嗯。。。您可以使用regex手动执行,例如:</p>
<pre><code>re.sub(
u'([\uD800-\uDBFF])([\uDC00-\uDFFF])',
lambda m: unichr((ord(m.group(1))-0xD800<<10)+ord(m.group(2))-0xDC00+0x10000),
s
)
</code></pre>
<p>当然不是更直接。。。我也怀疑它是否真的更有效!在</p>