【发布时间】:2021-12-29 00:57:09
【问题描述】:
(注意,我不是 100% 确定字符串是如何编码的,不同编码方案之间的区别等。因此我可能会在这里问一个愚蠢的问题。我使用 VScode 作为 IDE 和 Python 3.8.1)
我今天遇到了一个问题,客户向我们发送了一封电子邮件。我从 Zendesk 的 API 中提取了电子邮件,并希望将其存储在我们的 MySQL 数据库中。我在推送时收到了这个incorrect string value '\xF0\x9D\x96\xA7\xF0\x9D' 错误,这很奇怪,因为电子邮件正文只是像Hello - where is my package?(另一种语言)这样的纯文本。过了一会儿,我注意到所有字母看起来都不像“普通字符串字母”,结果发现电子邮件中的Hello 不等于"Hello" 即email_body[:5]=="Hello" 是假的(可能使用了一些奇怪的字体电子邮件?)。对正文进行编码表明,正文确实以\xF0\x9D\x96\xA7\xF0\x9D 开头,而不是“Hello”
问题是,如上所示,邮件中的"Hello" 不等于“普通”"Hello",因此我无法比较字符串、进行字符串操作等。
有没有办法将我从电子邮件正文中得到的“Hello”转换为普通字符串,使两个“Hello”字符串再次相等?
【问题讨论】:
-
您可以使用
unidecodemodule,但我怀疑这不是您真正想要的。 -
如果它可以转换以奇怪方式编码的电子邮件(可能是因为字体?)那么我当然愿意接受建议
-
您可能有多个问题。这看起来不像 Unicode 字符串,它看起来像字节字符串 - 在您知道它的编码之前,您将无法到达任何地方。
-
正如@Mark Ransom 所说,我们需要查看原始文本,Hello 字符串之前是否有任何特殊字符。
-
前 4 个字节是 U+15AD7 MATHEMATICAL SANS-SERIF CAPITAL H,UTF-8 编码。
标签: python utf-8 character-encoding