设置python的默认编码为utf8

(这部分转自南瓜小米粥的博客):

这是Python的编码问题,设置python的默认编码为utf8

python安装目录:/etc/python2.x/sitecustomize.py
 
1 import sys
2 reload(sys)
3 sys.setdefaultencoding('utf-8')
4 try:
5     import apport_python_hook
6 except ImportError:
7     pass
8 else:
9     apport_python_hook.install()
如果在windows下:
可以在Python安装目录下的Lib/site-packages目录中,新建一个sitecustomize.py文件(也可以建在其它地方,然后手工导入,建在这里,每次启动Python的时候设置将自动生效),内容如下:
1 import sys
2 sys.setdefaultencoding('utf-8'#set default encoding to utf-8
然后可以查看到改变已经生效
1 >>> import sys
2 >>> sys.getdefaultencoding()
3 'utf-8'
此时运行程序,如果仍然报告之前的错误,只需要显示地设定输出的编码
1 print s.encode('utf-8')
就可以看到正确显示。



---------------------------
此部分转自:http://blog.csdn.net/a6225301/article/details/43406373

网上有很多说法,有的说在标题加入东西,有的还有其他,如果奏效的话是可以的。

对于对话框,大家可以用pyqt自动生成的代码:

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. try:  
  2.     _fromUtf8 = QtCore.QString.fromUtf8  
  3. except AttributeError:  
  4.     def _fromUtf8(s):  
  5.         return s  
  6.   
  7.   
  8. try:  
  9.     _encoding = QtGui.QApplication.UnicodeUTF8  
  10.     def _translate(context, text, disambig):  
  11.         return QtGui.QApplication.translate(context, text, disambig, _encoding)  
  12. except AttributeError:  
  13.     def _translate(context, text, disambig):  
  14.         return QtGui.QApplication.translate(context, text, disambig)  
[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. QtGui.QMessageBox.about(self,(_fromUtf8("恭喜您!")), (_fromUtf8("恭喜您,您的验证码通过,请您及时领取奖品!")))  
[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. _fromUtf8("恭喜您,您的验证码通过,请您及时领取奖品!")  

用上面的那句就可以完美解决。


另外对于连接数据库,中文出现问号,解决如下:

以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解决方法。

python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。

(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码

 代码如下 复制代码
#encoding=utf-8



(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号

 代码如下 复制代码
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')



(3)、设置python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)

 代码如下 复制代码

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



注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”

一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):

 代码如下 复制代码
#encoding:utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import pymssql
try:
    conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
    sql="select * from UserInfo"

    cur=conn.cursor()
    cur.execute(sql)
    data=cur.fetchall()
    conn.close()
    print data
except Exception,e:
    print e



运行结果如下:

 代码如下 复制代码

[(u'20093501', u'xb9xf9xbexb8', u'u7537 ', 35, u'xb4xf3xcfxc0'),
 (u'20093502', u'xbbxc6xc8xd8', u'u5973 ', 34, u'xc3xc0xc5xae'),
 (u'20093503', u'xc1xeexbaxfcxb3xe5', u'u7537 ', 25, u'2Bxc7xe0xc4xea'),
 (u'20093504', u'xc8xcexd3xafxd3xaf', u'u5973 ', 24, u'xc6xafxc1xc1')]
 [Finished in 0.2s]


 虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。

上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。

其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文件也是类似的解决方案。


  • 19
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值