【小小伎俩】消杀Python解码时的UnicodeEncodeError

最近开始啃PyQt。

这货的实用价值大,值得费些劲鼓捣、折腾。

入门的导盲书很多,上手较快。缺少的是,技术含量高的文档资料。

网上很多东西是比着Qt的葫芦画瓢。

想看看先行者们的经验教训,满世界寻摸,没找到论坛,只找着一个邮件列表。

千辛万苦弄回来一堆zip文档,不想手工拆解,写个script去拆包,却遇上了麻烦。

邮件列表的文档,会有多种自然语言的编码,有时会出现解码错误:UnicodeEncodeError。

解码问题,是Python的老大难。我现在用的3.4.1,也没真正解决它。

折腾半天,自造一个办法。直接用代码说话:

from gzip import GzipFile

def special():
    z = GzipFile('./mails/2014-August.txt.gz', 'r')
    f = open('./0001.txt','w')
    l = z.readlines()
    for b in l:
        try:
            s = b.decode('gbk')
        except:
            s = utf8(b)
        finally:
            s = str(b)
        try:
            f.write(s)
        except:
            continue
    f.close()

#---------------------------------------------------
def utf8(b):
    try:
        s = b.decode('utf-8')
        return s
    except :
        return str(b)
时间: 2024-11-10 06:17:13

【小小伎俩】消杀Python解码时的UnicodeEncodeError的相关文章

python报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-26: ordinal not in range(128)”问题解决

方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为: Python代码  : # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') 此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需

python错误之UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-8: ordinal not in range(128)

# coding = ascii import jsonimport pickleimport sysimport os decode()和encode方法中第一个参数为编码格式,第二个为出现无法转换时使用何种处理方式(ignore:忽略,无法转换则为空:replace:用?代替) 由于在python3中字符编码默认为unicode,所有直接调用encode方法实现字符编码的转换,由于asscii字符中本来就不包含中文字符,所以decode为他 会造成报错,是用replace后虽然能比避免报错,

python报错 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

报错:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-3: ordinal not in range(128) 解决方法,在文件开头添加: import sys; reload(sys); sys.setdefaultencoding('utf8') 问题是在练习爬虫的时候,抓取api接口的json数据转换时出现的,后面参考python格式化输出文章做了一些排版处理,如下 python报错 Unico

python—— 写入错误UnicodeEncodeError的解决办法

在写python爬虫过程中,有时候吧结果写入到txt文件,但是会遇到UnicodeEncodeError. 错误原因-- 把文件内容,写入到文件中时,出错了. 而出错的原因其实是,python系统,在使用默认的编码类型,此处的ascii,去将对应的内容,写入到文件中.  但是由于其中一些内容,ascii编码不支持,所以报错. 解决办法-- 谷歌.百度后发现解决办法有两个,总结并记录下: 1. import sys reload(sys) sys.setdefaultencoding('utf-8

如何系统地自学 Python?

最近开始系统的学习Python,以及整理的一些资料.github记录着个人自学 Python 的过程,持续更新.欢迎大家一起来完善这个自学Python学习的项目,给后来者一个参考的学习过程.github项目地址:shfanzie/Systematically_self-study_Python 如何系统地自学 Python ? 网上 Google .百度文章一大把,不知道从何学起,只会使初学者更加的迷惑.首先,我推荐一篇 彭猫 在知乎上的回答:如何系统地自学 Python ?希望能给大家一个系统

Python简明教程

DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后跟的第三行开始是任何详细的解释说明.在此强烈建议你在有关你所有非凡功能的文档字符串中都遵循这一约定. 我们可以通过使用函数的 __doc__(注意其中的双下划綫)属性(属于函数的名称)来获取函数 print_max 的文档字符串属性.只消记住 Python 将所有东西都视为一个对象,这其中自然包括函数.我们将在后面的类(Class)章节讨论有关对象的更多细节.+ 如果你曾使用过

全自动Web后门扫描(转)

阅读目录 工具介绍 使用方法 工具介绍 这是一款全自动Web后门查杀工具,基于Python开发 某些较新的后门可能会查杀失败 规则列表来自seay博客 回到顶部 使用方法 1.按恶意代码查杀: python Scan_webshell.py 目录名 2.按修改时间查杀: python Scan_webshell.py 目录名 修改时间(格式:"2016-01-08 10:00:00") 回到顶部 回到顶部 工具下载 http://www.cnblogs.com/vforbox/p/51

reload(sys)后print失效问题解决

python版本: python2.7.6 #查看python默认编码格式 >>> import sys >>> print sys.getdefaultencoding() #python 2.x 默认编码是ascii格式; python 3.x 默认编码是utf-8格式 ascii #设置python默认的编码格式 >>> import sys >>> print sys.setdefaultencoding('utf-8') 操

Sightseeing

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 969    Accepted Submission(s): 409 Problem Description Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every da