python - 日文字符无法从 Python3 中的 unicode 解码
问题描述
所以我有一个字符串“\u00e3\u0081\u00ae\u00e3\u0081\u00bb\u00e3\u0082\u0082”,它应该代表日语字符“のほも”。作为参考,我从我的 Facebook 数据下载了这个, 这是我的一个聊天的标题, 被编码为上述. 当我将此代码提交到 github 应用程序 (FBMessageExplorer) 时, 它恢复了原始的日语字符串, 所以我知道它不是完全错误的。
但是,当我尝试在 python 中打印这个字符串时,我得到“ã®ã»ã”,所以出了点问题。我查了unicode字符,显然“のほも”应该表示为“\u306e\u307b\u3082”,这在python中确实有效。但我不知道github应用程序如何恢复unicode表达式上面到日文文本,当它似乎不是确切的 unicode 字符串时?我真的很困惑。
谢谢您的帮助!
解决方案
看起来原始消息是 Unicode 转义编码的 UTF-8 字节,而不是直接的 Unicode 转义字符。即,“の”的 UTF-8 编码是E3 81 AE
. 所以你必须在多个步骤中解码该文本:
- Unicode 转义为无意义的字符。
- 无意义的字符转换为字节。
- 解释为 UTF-8 的字节:
>>> "\u00e3\u0081\u00ae\u00e3\u0081\u00bb\u00e3\u0082\u0082".encode('latin1').decode('utf-8')
'のほも'
推荐阅读
- python - 如何使用类似 pandas 的界面执行数据库内分析?
- delphi - Rtti:在类中调用方法时获取“无效的类类型转换”
- c# - 如何转换嵌套的泛型类型?
- nginx - NGINX 动态定位 | 别名
- node.js - Stripe Payment - 网络请求失败
- javascript - setInterval 实现问题
- c# - 异步调用后 UserContext 变为 null
- node.js - 为什么“未定义”作为 Node 的 lib/http.js 的请求标头值是非法的?
- opencv - 无法将 C++ 代码(使用 OpenCV)编译为 wasm
- dialogflow-es - 为什么 Botium CLI 无法从 DialogFlow 代理中提取话语数据?