繁体   English   中英

Python - unicode字符串中的ASCII编码字符串; 如何删除'你'?

[英]Python - ASCII encoding string in the unicode string; how to remove that 'u'?

当我在中文中使用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)

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

顺便说一句,如果没有'你',我会得到正确的结果,如:

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用于这些工作; 它处理各种各样的文本问题,包括Windows代码页Mojibake,其中一些产生的“代码点”不能合法地编码到代码页。 ftfy.fix_text()函数接受Unicode输入并修复它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM