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

Python—unicode字符串中的ASCII编码字符串;如何删除该';u';?,python,unicode,encoding,ascii,urlencode,Python,Unicode,Encoding,Ascii,Urlencode,当我在中文中使用python模块“pygoogle”时,我得到了类似u”的urlhttp://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.or

当我在中文中使用python模块“pygoogle”时,我得到了类似
u”的urlhttp://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/汉语
你有一个;在本例中,这些是UTF-8字节,解码时就像它们是拉丁语-1字节一样

要反转此过程,请再次编码为拉丁语-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/汉语
由于我的终端配置为处理UTF-8,所以打印工作正常。通过解码为UTF-8,可以再次获得
unicode
对象:

>>> a.encode('latin-1').decode('utf8')
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'
ISO-8859-1(拉丁语-1)编解码器将一对一映射到前255个Unicode代码点,这就是字符串内容看起来没有变化的原因

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

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

你在用Python2吗?当我键入
打印
时,我得到了正确的输出。为什么首字母“u”会让你烦恼?@user2560053:你试过打印
a
?你得到的不是中文文本,而是
http://zh.wikipedia.org/zh/æèè­­­
(加上一个0x89字节和U+00AD软连字符,您无法将其复制到注释框中),而不是
http://zh.wikipedia.org/zh/汉语。Mojibake这个词对我来说是新的,谢谢你提高了我的知识!非常感谢你!!我误解了“u”的意思是UTF-8。lol@Andrew.T:它是一个
unicode
对象;文本数据,而没有前缀的常规字符串是
str
对象,由字节组成(每个字符实际上是一个介于0和255之间的整数),通常表示编码的文本数据。你是上帝!我已经找了很久了!