【发布时间】: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,以便我可以将其解码为 unicode?或者有没有可以达到这个目的的包。
我对 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