首页 > 解决方案 > 日文字符无法从 Python3 中的 unicode 解码

问题描述

所以我有一个字符串“\u00e3\u0081\u00ae\u00e3\u0081\u00bb\u00e3\u0082\u0082”,它应该代表日语字符“のほも”。作为参考,我从我的 Facebook 数据下载了这个, 这是我的一个聊天的标题, 被编码为上述. 当我将此代码提交到 github 应用程序 (FBMessageExplorer) 时, 它恢复了原始的日语字符串, 所以我知道它不是完全错误的。

但是,当我尝试在 python 中打印这个字符串时,我得到“ã®ã»ã”,所以出了点问题。我查了unicode字符,显然“のほも”应该表示为“\u306e\u307b\u3082”,这在python中确实有效。但我不知道github应用程序如何恢复unicode表达式上面到日文文本,当它似乎不是确切的 unicode 字符串时?我真的很困惑。

谢谢您的帮助!

标签: pythonunicode

解决方案


看起来原始消息是 Unicode 转义编码的 UTF-8 字节,而不是直接的 Unicode 转义字符。即,“の”的 UTF-8 编码是E3 81 AE. 所以你必须在多个步骤中解码该文本:

  1. Unicode 转义为无意义的字符。
  2. 无意义的字符转换为字节。
  3. 解释为 UTF-8 的字节:
>>> "\u00e3\u0081\u00ae\u00e3\u0081\u00bb\u00e3\u0082\u0082".encode('latin1').decode('utf-8')
'のほも'

推荐阅读