关于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此篇博文,网上有些直接扫下来的文章会让人迷惑.

你可能感兴趣的:(python)