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

posted on 2015-02-10 10:53  Sprite  阅读(754)  评论(0编辑  收藏  举报

导航