如何解码转义的Unicode字符?

时间:2018-09-22 20:34:36

标签: python python-3.x unicode encoding

我正在尝试用实际字符替换escpaed Unicode字符:

string = "\\u00c3\\u00a4"
print(string.encode().decode("unicode-escape"))

预期输出为ä,实际输出为ä

1 个答案:

答案 0 :(得分:2)

我不确定@melpomene的“知道他们在做什么”的标准是什么,但是以下解决方案具有worked previously, for example for decoding broken Hebrew text

("\\u00c3\\u00a4"
  .encode('latin-1')
  .decode('unicode_escape')
  .encode('latin-1')
  .decode('utf-8')
)

输出:

'ä'

其工作原理如下:

  • 仅包含ascii字符'\''u''0''0''c'等的字符串被转换为字节,使用太疯狂的8位编码(只要正确地处理ASCII字符,哪一个都不重要)
  • 使用解码器将'\u00c3'转义解释为Unicode代码点U + 00C3(带波浪号的拉丁文大写字母A,'Ã')。从您的代码的角度来看,这是无稽之谈,但是当再次用ISO-8859-1 / 'latin-1'进行编码时,此unicode代码点具有正确的字节表示,所以...
  • 使用'latin-1'再次对其进行编码
  • 这次将其正确解码为UTF-8

再次,与链接文章中的相同:在投入大量精力修复损坏的文本之前,您可能希望尝试修复以这种奇怪方式进行编码的部分代码。