【问题标题】:Python 2.7: Trouble Encoding to UTF-8Python 2.7:编码为 UTF-8 的问题
【发布时间】:2017-07-05 14:50:03
【问题描述】:

我有一个数据框,其中有一列 _text,其中包含一篇文章的文本。我正在尝试获取数据框中每一行的文章长度。这是我的尝试:

from bs4 import BeautifulSoup
result_df['_text'] = [BeautifulSoup(text, "lxml").get_text() for text in result_df['_text']]

text_word_length = [len(str(x).split(" ")) for x in result_df['_text']]

很遗憾,我收到了这个错误:

    ---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-8-f6c8ab83a46f> in <module>()
----> 1 text_word_length = [len(str(x).split(" ")) for x in result_df['_text']]

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 231: ordinal not in range(128)

似乎我应该在某处指定“utf-8”,我只是不确定在哪里......

谢谢!

【问题讨论】:

  • 尝试在脚本开头使用# -*- coding: utf-8 -*-?我不知道它是否有效。
  • 请发布您在问题中遇到的错误的完整追溯。
  • @mpf82 已更新!

标签: python encoding utf


【解决方案1】:

根据官方python文档: Python Official Site

要定义源代码编码,必须将魔术注释放在源文件中,作为文件的第一行或第二行,例如:

# coding=<encoding name>

或(使用流行编辑器认可的格式):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

或:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

【讨论】:

  • 不幸的是,在 Jupyter Notebook 中运行它并不能解决我的问题
  • 这是一个不错的尝试,但答案很糟糕。魔术注释仅用于在 unicode litterals 中允许非 ascii 字符。它没有设置默认字符集,在 Python2 中通常为 ascii,在 Python3 中通常为 utf8。
【解决方案2】:

我假设您使用的是 Python 2 版本,并且您的输入文本包含非 ASCII 字符。问题出现在str(x),默认情况下,当 x 是一个 unicode 字符串时,它以 x.encode('ascii') 结尾。

你有两种方法可以解决这个问题:

  1. 正确编码 utf-8 中的 unicode 字符串:

    text_word_length = [len(x.encode('utf-8').split(" ")) for x in result_df['_text']]
    
  2. 将字符串拆分为 unicode:

    text_word_length = [len(x.split(u" ")) for x in result_df['_text']]
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多