【问题标题】:Printing encoded utf-8 webpage words with accents in python在 python 中打印带有重音符号的编码 utf-8 网页单词
【发布时间】:2014-08-30 16:42:19
【问题描述】:

我正在使用 BeautifulSoup4 获取网页内容(编码为 utf-8)。当我尝试打印带有重音符号的单词时会出现问题,python 会引发以下错误:

"UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-4: ordinal not in range(128)"

如果我使用 .encode('utf-8') ,我不会再收到错误,但也不会正确写出单词(它给了我一些带有重音符号的 !@% 的东西)。

是否有任何函数的简单用法让我有机会正确打印带有所有重音的单词?

代码:

def foo(soup):
    children = soup.find('div', {'id': 'test'}).find_all('p')
    for child in children:
      print child.name, child.string
    return '---'

引发的错误发生在child.string

【问题讨论】:

  • 请出示您的代码。
  • 请提供代码。但在此之前,请尝试使用unicode(s) 转换字符串。
  • 代码添加到问题中。 @evanbas 我也尝试过使用 unicode,但是没有用。
  • 您告诉我们的是您的代码工作正常,但您的终端(或您的 Python,或两者一起)未配置为 Unicode 输出。编码为 UTF-8 基本上会按照您的描述进行,但这是完全正确的行为,但是您正在错误地查看输出。我会尝试找到合适的副本;光是这个网站就应该有数百个。

标签: python encoding utf-8 beautifulsoup


【解决方案1】:

如果要进行测试,请将其放在文件顶部

# -*- coding: utf-8 -*-

这是修复错误的尝试。

print child.name, child.string.decode('utf-8')

基本上你应该使用解码而不是编码。

【讨论】:

  • 感谢您的提示。刚刚从“解码”更正为“编码”,效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2016-12-03
  • 2018-06-22
相关资源
最近更新 更多