Python3.3是否比2.7更好地解码和重新编码已删除的Web文本到UTF-8??比如,好多了?

Python3.3是否比2.7更好地解码和重新编码已删除的Web文本到UTF-8??比如,好多了?,python,python-2.7,python-3.x,unicode,encoding,Python,Python 2.7,Python 3.x,Unicode,Encoding,似乎有一百万个问题涉及Python Unicode错误,…序数[不在范围(128)。看起来,绝大多数涉及Python2.x 我知道这些错误,因为我目前在编码,解码地狱。对于一个辅助项目,我会清理网页并尝试规范化文本数据,这样它就不会在我们的网站上出现疯狂的字符。为了规范化数据,我依赖于HTMLParser的HTMLParser()和entitydefs,以及对文本的原始形式进行解码(string.decode('[original encoding]','ignore')),并将其编码为UTF-

似乎有一百万个问题涉及Python Unicode错误,
…序数[不在范围(128)
。看起来,绝大多数涉及Python2.x

我知道这些错误,因为我目前在编码,解码地狱。对于一个辅助项目,我会清理网页并尝试规范化文本数据,这样它就不会在我们的网站上出现疯狂的字符。为了规范化数据,我依赖于HTMLParser的
HTMLParser()
entitydefs
,以及对文本的原始形式进行解码(
string.decode('[original encoding]','ignore'))
,并将其编码为UTF-8(
string.encode('UTF-8','ignore')

然而,似乎总有一个网站,我的努力失败了,引发了同样的老
UnicodeError:ASCII解码错误…序号不在范围内(128)。
太烦人了

我读过(并且)在Python3中,所有文本都是Unicode。虽然我读过很多关于Unicode的书,因为我不是一名软件工程师,但我不知道Unicode是否比2.x默认的ascii编码选项客观上更好(即更低的失败率)。我不得不认为任何事情都会更好,但我希望如果有更专业、更有经验的人能够提供一些观点

我想知道我是否应该迁移到Python3,以便它(改进)处理从web上抓取的文本。我希望这里有人能解释一下(或者提供一些资源来解释)Python3文本处理方法的优缺点。更好吗??是否有人已经迁移到Python 3解决了我的同一个问题??如果
2to3
迁移不是问题,他/她会建议我开始使用Python 3吗


提前感谢您的帮助。我确实需要它。

我将从Python 2.7用户的角度讲

确实,Python3在
Unicode
字段上引入了一些重大更改。我不会说在Python3中使用
编码更容易,但使用i18n确实更合理

正如我所说,我使用Python2.7,到目前为止,我已经能够处理我发现的每一个
编码问题。您只需了解引擎盖下发生的事情,并对
编码的内容有一个非常合理的背景,当然:

在那篇文章中,Joel说了一些你需要记住的事情,每当你在
编码的情况下遇到自己时

在不知道使用什么编码的情况下使用字符串是没有意义的

话虽如此,我建议用Python 2.7解决您的问题如下:

  • 当然要读乔尔的文章(读起来很棒,只需要30分钟或更少时间)
  • 找出网页使用的
    编码方式(您可以通过查看
    响应标题或
    BeautifulSoup
    中的字段来感知)
  • .decode()
    使用您计算出的
    编码来检索字符串
  • 当您进行
    解码
    时,您不再拥有
    str
    对象,而是拥有
    unicode
    对象
  • unicode
    只是一种内部表示,而不是真正的编码,因此如果您想在某处输出内容,您必须
    .encode()
    它,我建议您当然使用
    utf-8
  • 现在,必须了解一些要点。可能您正在抓取的网页没有编码意识,它说它使用了一些
    编码,但没有坚持。这是站长犯的错误,但您必须采取措施来解决。您有三种选择之一:

  • ,忽略可能有问题的
    字符。只是静静地传递它们
  • 有一些好的python库可以尝试找出字符串使用的编码方式。这些库非常准确,但当然不是万能的。它们可能无法猜测,特别是当
    编码格式不正确时
  • 生气并放弃这个项目(我真的不推荐这个)
  • 要获得正确的
    编码
    ,需要从源代码和客户机获得一定的规范。你必须正确地开发你的程序,但是你需要
    关于编码的信息和源代码中的真实编码相匹配

    Python3改进了它的
    unicode
    处理,但是如果您不理解正在发生的事情,它可能是无用的。你能做的最好的事情就是理解
    编码
    (同样,读Joel也没那么难!),一旦你理解了它,你就可以用Python2.7、Python3.3甚至PHP;)


    希望这有帮助

    推荐阅读:一定要阅读@dan04给出的链接。一旦您知道自己在做什么,Python3就比Python2好得多,因为“显式优于隐式”。也就是说,Python3在Unicode字符串和字节序列之间筑起了一道高墙——Python2中的许多问题都是由于错误地试图“神奇地”在它们之间进行转换造成的。@dan04我一定会读到它。谢谢你们,伙计们。作为基于意见的保留?这太疯狂了——每个回答这个问题的人都有相同的观点:Python 3比Python 2更好。为什么这会令人惊讶呢?Guido van Rossum非常有意地修改了Python3,使Unicode的使用比Python2更好。阅读这里提供的链接,详细说明原因。这根本不是意见:这是经过十多年的Python2 Unicode问题经验,经过深思熟虑的设计修改后的预期结果。也许投这票的人是那些没有根据的人?;-)谢谢你的建议——非常有用。非常好的一篇,充满了有益健康的事实,没有任何错误