【问题标题】:UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xa0:序数不在范围内(128)
【发布时间】:2016-07-05 08:46:39
【问题描述】:

我正在为我正在做的一个项目抓取Oregon Teacher License data。这是我的代码:

educ_employ = tree.xpath('//tr[15]//td[@bgcolor="#A9EDFC"]//text()')
print educ_employ
#[u'Jefferson Middle School\xa0\xa0(2013 - 2014)']

我想去掉“\xa0”。这是我的代码:

educ_employ = ([s.strip('\xa0') for s in educ_employ])
print educ_employ
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

我试过this

educ_employ = ([s.decode('utf-8').strip('\xa0') for s in educ_employ])
print educ_employ
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

还有this

import sys

reload(sys)
sys.setdefaultencoding('utf-8')

educ_employ = tree.xpath('//tr[15]//td[@bgcolor="#A9EDFC"]//text()')
educ_employ = ([s.decode('utf-8').strip('\xa0') for s in educ_employ])
print educ_employ
>>>

我没有得到最后一个错误,但我也没有得到输出。我正在使用 Python 2.7。有谁知道如何解决这个问题?

【问题讨论】:

  • stackoverflow.com/questions/4374455/…中的“常用成语”
  • @mpez0 用于 Python 3,问题是关于 Python 2
  • @mpez0 抱歉,我无法理解发生了什么。 codecs 代表什么?/我对编程很陌生,所以这有点过头了。
  • @otteheng 忽略它们:D 但是,如果您不是绝对需要使用 Python 2,我建议切换到 Python 3,它可以更轻松地处理文本/unicode。
  • @AnttiHaapala 感谢您的建议!

标签: python python-2.7


【解决方案1】:

您正在混淆unicode 对象和str 对象。 educ_employunicode,但 '\xa0'str

此外,.strip() 仅删除字符串开头和结尾的字符,而不是中间的字符。请改用.replace()

试试:

educ_employ = [u'Jefferson Middle School\xa0\xa0(2013 - 2014)']
educ_employ = [s.replace(u'\xa0', u'') for s in educ_employ]
print educ_employ

【讨论】:

  • 谢谢,效果很好。我之前实际上尝试过.replace,但没有成功。我注意到您在代码中包含了u。只是好奇这意味着什么以及为什么会有所不同?
  • 没有u 的字符串文字是str 类型的对象 带有u 的字符串文字是unicode 类型的对象。我的回答的本质是“不要混合strunicode;”将u 添加到字符串文字就证明了这一点。
  • 这很有意义。感谢您的澄清!
  • @otteheng 再次,python3 上不存在这种混淆
猜你喜欢
  • 2011-05-13
  • 2014-02-19
  • 2018-07-26
  • 2020-11-06
  • 2014-08-12
  • 2013-09-20
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多