Python - unicode字符串中的ASCII编码字符串;如何删除 'u'?
Python - ASCII encoding string in the unicode string; how to remove that 'u'?
当我在中文中使用 python 模块 'pygoogle' 时,我得到了 url like 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,其中某些结果 'codepoints' 无法合法地编码到代码页。 ftfy.fix_text()
函数接受 Unicode 输入并修复它:
>>> import ftfy
>>> ftfy.fix_text(a)
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'
当我在中文中使用 python 模块 'pygoogle' 时,我得到了 url like 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,其中某些结果 'codepoints' 无法合法地编码到代码页。 ftfy.fix_text()
函数接受 Unicode 输入并修复它:
>>> import ftfy
>>> ftfy.fix_text(a)
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'