关于python27 中文编码
本博文已移致独立博客:www.pubwin2009.net
传送门:http://www.pubwin2009.net/index.php/pubwin/42.html
看了网上好多的资料,以前一直不理解encode,decode以前uncode,utf-8,现在理解了,uncode是转码内部中介,比如
#coding:utf-8 a='中国' print repr(a) #这个时候a是utf8的字节流 b=a.decode('utf8') print repr(b) #b是uncode字串了 #由于在windows,cmd控制台上能显示的编码只有gbk或是uncode,但是不能显示utf8 #我们在写控制台程序的时候需要将utf8转为gbk显示 c=b.encode('gbk') print repr(c) print a print b print c
decode是将其他编码的字串解码为uncode,encode是将uncode编码的字串编码为其他编码串以便保存或显示,uncode是一个内部中介
在交互式shell(idlle)里有一个问题就是在windows下,a=u’中国’是,会被这个u会被原样复制,如下图,但是写进脚本运行,就没有问题,还有发现不带b的版本的pymssql也有这个问题,读出来的gbk串会被无故的加上u但是编码没变有些输入法输入也是问题,会莫名其妙的多个字符进去.
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> a=u'中' >>> a u'\xd6\xd0' >>> a='中' >>> a '\xd6\xd0' >>>
下面附上今天写的一个根据日志统计出现次数的小程序:
#coding:utf-8 #count jiebang times in log #文件里出现一次发送群消息成功,就视为一次解绑成功 import os from time import sleep logpath='c:\log.log' #定义解绑日志路径 file=open(logpath,'r') #以只读方式打开解绑文件,生成解绑文件对象 a=u'发送群消息成功' #初始化判断字串 countline=0 #初始化总行数 countjiebang=0 #初始化解绑次数 while 1: line=file.readline() #读取解绑 if not line:break #如果到文件尾,跳出 #print line countline+=1 if a in line.decode('gbk'): #由于是用到gbk码,所以要decode #判断此行是否含有判断字串 #print 1 #测试用 countjiebang+=1 #sleep(2) #测试用 file.close() #关闭文件对象 print repr(a) print 'lines:',countline #显示有一共有多少行 print 'jiebang times:',countjiebang #显示解绑了多少次 os.system('pause')
log.log 片断:
2015-02-09 18:23:46 信息 解绑:1652392404|13122700501|13解绑:1 2015-02-09 18:24:58 信息 发送短信中心心跳成功. 2015-02-09 18:25:03 信息 解绑 压入堆栈|15661614231|上海市宝山区 2015-02-09 18:25:03 信息 群消息:41897886|(931010138)|消息:解绑 15661614231 2015-02-09 18:25:06 信息 群:1545325917 发送群消息成功:【15661614231】在 上海市宝山区 解绑成功!
感谢:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html此篇博文,网上有些直接扫下来的文章会让人迷惑.