gpt4 book ai didi

python - 在 Python 2.7 中从 Unicode 转换字符串时遇到问题?

转载 作者:行者123 更新时间:2023-11-30 23:38:57 25 4
gpt4 key购买 nike

我对 Python 2.x 中的 unicode 感到非常困惑。

我正在使用 BeautifulSoup 抓取网页,并且尝试将我找到的内容插入到字典中,其中名称为键,网址为值。

我正在使用 BeautifulSoup 的 find 函数来获取我需要的信息。我的代码如下:

name = i.find('a').string
url = i.find('a').get('href')

这是有效的,除了从 find 返回的 thign 是一个对象,而不是一个字符串。

事情开始让我困惑

如果我在将其分配给变量之前尝试将其转换为 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'

但是如果我尝试像这样访问字典的项目:

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():

name = unicode(i.find('a').string)

这是一个类似于 unicode 的对象,名为 NavigableString 。如果您确实需要它是一个str,您可以从那里对其进行编码:

name = unicode(i.find('a').string).encode('utf8')

或类似的。为了在 dict 中使用,我会使用 unicode() 对象而不是编码。

要了解 unicode()str() 之间的区别以及使用什么编码,我建议您阅读 Python Unicode HOWTO .

关于python - 在 Python 2.7 中从 Unicode 转换字符串时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13980906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com