目录

设置python的默认编码为utf8

目录

设置python的默认编码为utf8

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

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

python安装目录:/etc/python2.x/sitecustomize.py

1import sys
2reload (sys)
3sys.setdefaultencoding( 'utf-8' )
4try :
5import apport_python_hook
6except ImportError:
7pass
8else :
9apport_python_hook.install()

如果在windows下:

可以在Python安装目录下的Lib/site-packages目录中,新建一个sitecustomize.py文件(也可以建在其它地方,然后手工导入,建在这里,每次启动Python的时候设置将自动生效),内容如下:

1import sys
2sys.setdefaultencoding( 'utf-8' ) #set default encoding to utf-8

然后可以查看到改变已经生效

1>>> import sys
2>>> sys.getdefaultencoding()
3'utf-8'

此时运行程序,如果仍然报告之前的错误,只需要显示地设定输出的编码

1print s.encode( 'utf-8' )

就可以看到正确显示。


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

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

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

[python]

  1. try

    :

  2. _fromUtf8 = QtCore.QString.fromUtf8

  3. except

    AttributeError:

  4. def

    _fromUtf8(s):

  5. return

    s

  6. try

    :

  7. _encoding = QtGui.QApplication.UnicodeUTF8

  8. def

    _translate(context, text, disambig):

  9. return

    QtGui.QApplication.translate(context, text, disambig, _encoding)

  10. except

    AttributeError:

  11. def

    _translate(context, text, disambig):

  12. return

    QtGui.QApplication.translate(context, text, disambig)

[python]

  1. QtGui.QMessageBox.about(

    self

    ,(_fromUtf8(

    “恭喜您!”

    )), (_fromUtf8(

    “恭喜您,您的验证码通过,请您及时领取奖品!”

    )))

[python]

  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=" * 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包)等或者是普通文本文件也是类似的解决方案。