gpt4 book ai didi

Python——Unicode字符串中的ASCII编码字符串;如何删除 'u' ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:47 25 4
gpt4 key购买 nike

当我在中文中使用 python 模块 'pygoogle' 时,我得到了类似 u'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'

它是 unicode 但包含 ascii。我尝试将其编码回 utf-8,但代码也被更改了。

a =  u'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
a.encode('utf-8')
>>> 'http://zh.wikipedia.org/zh/\xc3\xa6\xc2\xb1\xc2\x89\xc3\xa8\xc2\xaf\xc2\xad'

我也尝试使用:

str(a)

但是我得到了错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-32: ordinal not in range(128)

如何对其进行编码以删除“u”?

顺便说一下,如果没有 'u' 我会得到正确的结果,例如:

s = 'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
print s
>>> http://zh.wikipedia.org/zh/汉语

最佳答案

你有一个 Mojibake ;在这种情况下,这些是 UTF-8 字节解码,就好像它们是 Latin-1 字节一样。

要反转这个过程,再次编码为 Latin-1:

>>> a =  u'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
>>> a.encode('latin-1')
'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
>>> print a.encode('latin-1')
http://zh.wikipedia.org/zh/汉语

print 起作用是因为我的终端配置为处理 UTF-8。您可以通过解码为 UTF-8 再次获得 unicode 对象:

>>> a.encode('latin-1').decode('utf8')
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'

ISO-8859-1 (Latin-1) 编解码器一对一映射到前 255 个 Unicode 代码点,这就是字符串内容看起来没有变化的原因。

您可能想要使用 ftfy library对于这样的工作;它处理各种各样的文本问题,包括 Windows 代码页 Mojibake,其中某些生成的“代码点”无法合法地编码到代码页。 ftfy.fix_text() 函数接受 Unicode 输入并修复它:

>>> import ftfy
>>> ftfy.fix_text(a)
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'

关于Python——Unicode字符串中的ASCII编码字符串;如何删除 'u' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30025819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com