繁体   English   中英

无法在Python 2.7中从Unicode转换字符串?

[英]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.

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