Unicode问题,在Python中正确解码/编码字符串

4

我正在使用BeautifulSoup,并且我得到了一个像这样的字符串:

u'Dassault Myst\xe8re'

这是一个Unicode字符,我想让它看起来像:

'Dassault Mystère'

我已经尝试过

name = name.encode('utf-8'), decode(), unicode()

我一直收到的错误是:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8'

我的默认编码似乎是'ascii': 即使我有以下设置,sys.getdefaultencoding() 也返回'ascii':

#!/usr/bin/env python
# encoding: utf-8

在文件顶部。

希望能一劳永逸地解决这个经常出现的Unicode问题!

谢谢。

1个回答

1

我不知道你是从哪里得到这个消息的,但看看这个例子:

$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = u'Dassault Myst\xe8re'
>>> txt
u'Dassault Myst\xe8re'
>>> print txt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 13:
  ordinal not in range(128)
>>> ^D
$ export LANG=en_US.UTF-8
$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = u'Dassault Myst\xe8re'
>>> txt
u'Dassault Myst\xe8re'
>>> print txt
Dassault Mystère
>>>^D 

如您所见,如果您的控制台是 ASCII 的,则在打印期间会从 Unicode 转换为 ASCII,如果有字符超出 ASCII 范围,则会抛出异常。

但如果控制台可以接受 Unicode,则一切都会正确显示。


好的,这解决了控制台打印问题。但是在构建URL时我仍然有一个问题,因为当我将“- u'Dassault Myst\xe8re'”附加到URL时,urllib2在进行HTTP请求时会出现错误。我猜它期望一个ASCII字符串,而我发送了其他东西? - James
第二部分使用此答案解决:https://dev59.com/T2855IYBdhLWcg3wXC9- - James
我相信在使用 "from future import unicode_literals" 时,urllib2 的工作符合预期。 - fiacre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接