【发布时间】:2013-12-03 10:20:13
【问题描述】:
Python2中关于unicode的问题。
据我所知,我应该始终decode 从外部(文件、网络)读取的所有内容。 decode 使用参数中指定的字符集将外部字节转换为内部 Python 字符串。所以decode("utf8")表示外面的字节是unicode字符串,会被解码成python字符串。
此外,我应该始终encode 我在外面写的所有内容。我在 encode 函数的参数中指定编码,它会转换为正确的编码并写入。
这些说法是对的,不是吗?
但有时当我解析 html 文档时会出现解码错误。据我了解其他编码的文档(例如cp1252),当我尝试使用 utf8 编码对其进行解码时会发生错误。那么问题来了怎么写防弹应用呢?
我发现有一个很好的库来猜测编码是chardet,这是编写防弹应用程序的唯一方法。对吧?
【问题讨论】:
-
该文档通常会在某处附带其编码声明。 See if the charset is specified. 如果您没有编码,或者声明的编码错误,您可能会遇到不可避免的错误。那么你能做的最好的事情就是用一些策略来处理错误,并产生一个可能看起来像你想要的结果。
-
我发现 Python 中编码问题的最佳概述是以下页面:sebsauvage.net/python/snyppets/#unicode 此外,您的帖子中有一个小误解:«decode» 函数将始终为您提供 Unicode。我同意前面的评论,即:首先依赖字符集声明。确实没有一种“防弹”方法来处理错误编码的文档。
-
stackoverflow.com/questions/606191/… 也可以提供帮助。