设置python的默认编码为utf8
设置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]
try
:
_fromUtf8 = QtCore.QString.fromUtf8
except
AttributeError:
def
_fromUtf8(s):
return
s
try
:
_encoding = QtGui.QApplication.UnicodeUTF8
def
_translate(context, text, disambig):
return
QtGui.QApplication.translate(context, text, disambig, _encoding)
except
AttributeError:
def
_translate(context, text, disambig):
return
QtGui.QApplication.translate(context, text, disambig)
[python]
QtGui.QMessageBox.about(
self
,(_fromUtf8(
“恭喜您!”
)), (_fromUtf8(
“恭喜您,您的验证码通过,请您及时领取奖品!”
)))
[python]
_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包)等或者是普通文本文件也是类似的解决方案。