【问题标题】:Python – How do I convert an ASCII string into UTF-8?Python – 如何将 ASCII 字符串转换为 UTF-8?
【发布时间】:2021-12-31 05:59:12
【问题描述】:

我在 python 中使用了一个包,它使用 ASCII 字符而不是 unicode 返回一个字符串(例如,返回 'seré' 而不是 seré)。

鉴于这是 python 3.8,字符串实际上是用 unicode 编码的,这个包似乎只是把它当作 ASCII 输出。因此,当我尝试执行 x.decode('utf-8') 或 x.encode('ascii') 时,都不起作用。有没有办法让 python 将字符串视为 ASCII,以便我可以将其解码为 un​​icode?或者有没有可以达到这个目的的包。

我对 python 比较陌生,所以如果我的解释不清楚,我深表歉意。如果需要,我很乐意澄清。

代码

from spanishconjugator import Conjugator as c  
verb = c().conjugate('pasar', 'preterite', 'indicative', 'yo')
print(verb)  

这将返回字符串“pasé”,它应该返回“pasé”。

更新

从进一步搜索和您的答案来看,这似乎是一个问题,即单个 2 字节 UTF-8 (é) 字符被逐字解释为两个 1 字节 latin-1 (é) 字符(与用 ASCII 做,我的错)。

设法修复它:

verb.encode('latin-1').decode('utf-8')

感谢那些评论的人。

【问题讨论】:

  • UTF-8 是 ASCII 的超集,因此从 ASCII 到 UTF-8 应该没有任何问题。如果您需要进一步的帮助,请发布指南中指定的最低可重现代码。
  • 除非要调试具体的包,其实是无关紧要的。请提供“ASCII 字符串”作为有效文字和所需的 Unicode 结果。
  • 你错了。 1)每个 ASCII 字符串已经是 UTF-8,2)ASCII 不包含字符“Ô或“©”。
  • 请注意,对于一个明显知道非 ASCII 字符的包来说,这似乎是一个严重的缺陷。这可能是使用 Python2 中的过时代码,或者缺乏维护。考虑与包维护者联系,以在包本身中修复此问题。
  • 请将问题和答案分开。解决方案不属于问题。

标签: python unicode utf-8 ascii decode


【解决方案1】:

如果输入字符串包含原始字节序数(例如 \xc3\xa9/é 而不是 é)使用 latin1 将其逐字编码为字节,然后 使用所需的编码解码

>>> "pasé".encode('latin1').decode()
'pasé'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2015-08-06
    • 2019-06-04
    • 2012-06-25
    • 2018-05-10
    • 2011-06-19
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多