python 字符串编码
最近写脚本遇到一些字符编码的问题。
Python默认的编码方案是unicode,而系统的编码方案是gbk,从某站抓回来的数据编码方案是utf-8同时用的还是全角的字符。
Python 里有几个好用的编码转换函数,unicode()和decode()将其它编码字符转换成unicode字符,encode()函数将unicode字符转换为其它编码字符。ord()函数将unicode字符转换为二进制整型,unichr()将二进制整型转换为unicode字符。
我的解决方案是在python脚本的第一行加上,以支持中文字符
#-*- coding: UTF-8 -*-
加上这一行之后在保存脚本的时候就会以utf8编码来保存,此时脚本里的字符串就是utf8的了。
此时,如果在脚本时有一句 print(“中文”)则会出现乱码,因为”中文”这个常量是utf8,而print是使用系统调用将字符显示在终端,使用的是gbk编码。可以用unicode做为中间编码。用python里的unicode()或decode()函数将其它编码转换为默认的unicode编码,然后再用encode()函数转换为可显示的gbk编码。如下可正常打印调试
print unicode("中文", 'utf8').encode('gbk')
对于全角转半角的问题,根据全角半角的映射关系,通过逐个字符比较,将可以转化的如英文字母数字等转化为半角,而中文等则保持为全角
全角字符unicode编码范围为十六进制 0xFF01 ~ 0xFF5E
半角字符unicode编码范围为0x21~ 0x7E
空格比较特殊,全角为0x3000,半角为0x20在GBK下全角空格为\xa1\xa1
全角转半角
def strQ2B(ustring): rstring = "" for uchar in ustring: inside_code=ord(uchar) if inside_code==0x3000: inside_code=0x0020 else: inside_code-=0xfee0 if inside_code<0x0020 or inside_code>0x7e: inside_code = ord(uchar) rstring += unichr(inside_code) return rstring
半角转全角
def strB2Q(ustring): rstring = "" for uchar in ustring: inside_code=ord(uchar) if inside_code==0x0020: inside_code=0x3000 elif inside_code > 0x20 and inside_code <= 0x7e: inside_code += 0xfee0 rstring += unichr(inside_code) return rstring

浙公网安备 33010602011771号