【问题标题】:Unicode vs encoding python text processingUnicode vs 编码 python 文本处理
【发布时间】:2013-12-10 00:58:25
【问题描述】:

我正在对从网络上抓取的文本进行一些文本处理。我之前在考虑解码原始文本

raw_html=  raw_html.decode("iso-8859-1")

后来编码为 UTF,所以我不会遇到编码问题...

raw_html=  raw_html.encode("UTF-8")

问题是,尽管知道网页编码,但我在解码部分不断收到错误...

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

我将处理多种语言,但不会处理太多网页(因此我的想法是手动设置编码)。我希望能够将所有语言(英语、法语、西班牙语、葡萄牙语)转换为一个共同的基础来使用。你有什么建议?

【问题讨论】:

  • 您正在编码为 Latin-1,而不是 UTF..
  • 你是怎么读到raw_html的?
  • @MartijnPieters 刚刚为编码中的 UTF-8 进行了编辑。发布时出现错误... raw_html 作为文本文件提供给我...我正在查看同一站点的 HTML 源代码,而我的 HTML 似乎已经通过某种形式的编码/解码字符不同...是否可以将其撤消回 HTML 原始编码?然后应用我的代码?
  • 没有看到任何无法诊断的样本。您可能使用了错误的编解码器,或者文件可能已使用错误的编解码器重新编码。后者通常是可以修复的,但我说的是笼统的说法。然而,这将是一个新问题!

标签: python unicode encoding


【解决方案1】:

如果raw_html.decode() 给您一个encoding 异常,那么它是已经 Unicode:

>>> u'é'.decode('latin1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)

因为 Python 2 在尝试“解码”Unicode 值时会隐式首先尝试编码(使用默认的 ASCII 编解码器)。

【讨论】:

  • 谢谢!抱歉...刚刚意识到错误...当我尝试将其编码为 UTF-8 时,我收到以下错误:UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - 将它们解释为不相等。是不是因为有些字符不能用 UTF-8 编码?在这种情况下,使用 unicode 处理文本会更有意义,不是吗?感谢您的帮助!
  • 尽可能使用 Unicode。解码 Unicode 毫无意义,毕竟您已经解码为 Unicode。检查print type(raw_html)
  • 抱歉打扰了.. 但这让我发疯了... Python 是否以某种格式对加载的文本进行编码?我正在尝试通过我在文本文件中看到的 unicode (\u20ac) 来匹配欧元符号 (€),但是当我导入时它似乎无法识别它......关于我可能做错了什么的任何想法?我正在使用 r'\\u20ac?\b' 来匹配它,如果我手动输入字符串作为变量,它工作得很好......
  • 也许这是一个新问题?为什么要转义 Unicode 转义而不使用 ur'...' 原始 Unicode 值?
  • 感谢马蒂金!我会将其表述为一个新问题。
猜你喜欢
  • 2018-12-11
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2021-12-13
  • 2012-09-29
  • 2011-08-11
相关资源
最近更新 更多