python编码各种问题

这两天处理数据,从数据库获取数据,用python的MySQLdb。但是中文总是出现乱码。

在此做个小结

1.mysql编码(网上资料太多自行搜索之)

2.python默认编码

开始只是改了mysql端的编码,改为UTF8,发现问题依旧。比如:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position xxx...

这是由于python默认编码是ASCII,故需要设置为UTF-8。使用sys中的setdefaultencoding方法:

import sys
sys.setdefaultencoding('utf8') 
然而会报错:

AttributeError: 'module' object has no attribute 'setdefaultencoding'

百度google之后,发现sys.setdefaultencoding 方法在python导入 site.py 后就删除了,不能再被调用了。

site.py源码:https://hg.python.org/cpython/file/2.7/Lib/site.py#l545

注意看main函数最后几行

    if hasattr(sys, "setdefaultencoding"):
        del sys.setdefaultencoding

site.py 是 python 解释器启动后,默认加载的一个脚本。如果使用 python -S 启动的话,将不会自动加载 site.py。

只能重新reload(sys)一下。于是:

import sys
reload(sys)
sys.setdefaultencoding('utf8') 

如何简化,不用每次添加这几行。

增加一个名为 sitecustomize.py,推荐存放的路径为 site-packages 目录下。sitecustomize.py 是在 site.py 被import 执行的,因为 sys.setdefaultencoding() 是在 site.py 的结尾处被删除的,所以,可以在 sitecustomize.py 使用 sys.setdefaultencoding()。

#file name:  sitecustomize.py
import sys  
sys.setdefaultencoding('utf-8')  

既然 sitecustomize.py 能在python启动时被自动加载, 所以除了设置编码外,也可以设置一些其他的东西。

3.源代码编码

习惯性以这个开头即可

# -*- coding:utf-8 -*- 

4.unicode中混杂u'\xa0' 

该问题是由于源数据中混杂不同编码的空格,如果直接输出到文件不会出问题,但是命令行输出,或者进行转码操作会报如下错误:

UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position xxx:illegal multibyte sequence

如果将其中的unicode串u'\xa0'替换正常了。

us.replace(u'\xa0', u' ')

其中us是一个unicode串

其实unicode自带方法.strip()可以直接去掉'\xa0'这样的空格






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值