[英]Trouble converting a string from Unicode in Python 2.7?
我对Python 2.x中的unicode非常困惑。
我正在使用BeautifulSoup来抓取一个网页,我正在尝试将我找到的东西插入一个字典中,其名称为密钥,url为值。
我正在使用BeautifulSoup的find
函数来获取我需要的信息。 我的代码开头如下:
name = i.find('a').string
url = i.find('a').get('href')
这是有效的,除了从find
返回的thign是一个Object,而不是一个字符串。
以下事情让我感到困惑
如果我在将其分配给变量之前尝试将其转换为str
类型,它有时会抛出UnicodeEncodeError
。
'ascii' codec can't encode character u'\xa0' in position 5: ordinal not in range(128)
我谷歌周围发现我应该编码ascii
我尝试添加:
print str(i.find('a').string).encode('ascii', 'ignore')
没有运气,仍然给出了一个Unicode错误。
从那里,我尝试使用repr
。
print repr(i.find('a').string)
这很有效......差不多!
我在这里遇到了一个新问题。
一旦完成所有内容,并且构建了字典,我就无法获取任何内容! 它一直给我一个KeyError
。
我可以循环这个词:
for i in sorted(data.iterkeys()):
print i
>>> u'Key1'
>>> u'Key2'
>>> u'Key3'
>>> u'Key4'
但如果我尝试访问这样的dict项目:
print data['key1']
要么
print data[u'key1']
要么
test = unicode('key1')
print data[test]
他们都返回KeyErrors,这对我来说是100%的混淆。 我认为它与它们是Unicode对象有关。
我已经尝试了我能想到的一切,但我无法弄清楚发生了什么。
哦! 更奇怪的是,这段代码:
name = repr(i.find('a').string)
print type(name)
回报
>>> type(str)
但如果我只打印那件事
print name
它将它显示为unicode字符串
>>>> u'string name'
.string
值确实不是字符串。 你需要将它unicode()
为unicode()
:
name = unicode(i.find('a').string)
它是一个类似于 unigode的对象,名为NavigableString
。 如果你确实需要它来代替str
,你可以从那里编码:
name = unicode(i.find('a').string).encode('utf8')
或类似的。 为了在dict
使用,我使用unicode()
对象而不是编码。
要理解unicode()
和str()
之间的区别以及要使用的编码,我建议您阅读Python Unicode HOWTO 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.