python字符编码(python2.6)

很懒,很久之前就写好的。一直没有贴上来。

今天发一下,稍后在详细说一下几种编码在内存情况

问题:

多系统不同平台间数据交互,系统的编码格式不同,一般情况如Windows的gb2312,svn的utf-8,以及可能的mysql的gbk默认编码。在三者间相互数据交互,需要字符转码。调用python中String模块的Decode和Encode解码和编码,下面将介绍python字符转换和我们在项目中遇到的实际问题

Python编码解码:

  1. python的两种编码:str和unicode

Python字符串有两种类型,一种是str,一种是unicode类型;其中str字符串中的编码格式很多。 Type(“str”).__name__可以输出字符串类型,但是没有办法输出str的编码格式,python的第三方库chardet 提够了相关的功能,可以判断str的编码格式。

例如: import chardet
 chardet.detect(rawdata)
{‘confidence‘: 0.98999999999999999, ‘encoding‘: ‘GB2312‘}

1)str

str的编码格式有gbk,utf8,latin1等等,我们在Decode前要确定str是哪种编码格式。

2)unicode

字符串在Python内部的表示是unicode编码,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码字符串。Python在读文本和写文本时候,都是读写str的字符串,如果是写unicode字符串,python内部会将unicode转换成系统编码再写到文件中,而不是写unicode或者读unicode。切忌,unicode只是中间编码,不是存储编码

  1. 字符转换函数使用

解码:

Decode:将其他编码的字符串转换成unicode编码

Eg:String.Decode(”gbk”),将“gbk”的String解码成unicode的字符串

(误解:将str转化成gbk的字符串,python的字符串的type没有gbk的类型) Decode返回的是unicode的字符串;ps:” String” is a str instance

编码:

Encode:将unicode编码转换成其他编码的字符串

Eg:String. Encode(“gbk”),将unicode的String编码成str,str是gbk格式编码(误解:将unicode转化成gbk的字符串)

Encode返回str的字符串;ps:”String” is a unicode instance

此外更改代码编码格式和系统编码格式的方法:

1)# -*- coding:gbk -*-指定代码的编码格式:如gbk,utf8等等

2)reload(sys)

sys.setdefaultencoding(‘gbk’)指定系统的默认编码格式 (在2.6中已经废弃)

  1. json

在项目中,数据入库和web数据的读取,要使用后台提够的接口,服务器端将mysql的结果序列化发送给接口,接口再反序列化数据。无论是数据库还是python的序列化和反序列化都有编码的问题,所以前期数据库的设计要和整个系统一致,否则会有很大编码问题。比如项目编码是gbk,数据交互都转换成gbk进行,那么数据库的编码最好就是gbk的编码。同时使用python中的json库也要指定编码是gbk,这样能减少很多编码转码的问题

Json序列化和反序列化的API

Import json

def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,

allow_nan=True, cls=None, indent=None, separators=None,

encoding=‘utf-8‘, default=None, **kw)json.loads(records, encoding)

def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,

parse_int=None, parse_constant=None, **kw):

"""Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON

document) to a Python object.

If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding

other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name

must be specified. Encodings that are not ASCII based (such as UCS-2)

are not allowed and should be decoded to ``unicode`` first.

1)Json.dumps,序列化成字符串(eg:[[‘jimmy’],[‘Helen’]]);这个类型是str,str的默认编码是utf8(可以指定编码)

2)Json.load是将字符串反序列化成一个pyhton的二维数组,数组为:[[u‘jimmy’],[u‘Helen’]]

3)json和python序列化和反序列化的数据结构对应

| JSON          | Python            |

| object        | dict              |

| array         | list              |

| string        | unicode           |

| number (int)  | int, long         |

| number (real) | float             |

| true          | True              |

| false         | False             |

| null          | None              |

  1. 小结

注意:

1)如果在插入数据库有特殊字符,可以使用python的第三方库mysqldb,MySQLdb.escape_string(str)自动转义str中所有的特殊字符;

2)默认情况,Python的函数入口编码大部分都是unicode的,一般我们传入的是str,如果参数都是英文没有问题,python自动将str解码成unicode;如果有中文,需要我们将str解码成unicode;

3)多系统,跨平台的项目,在设计初期就要充分考虑编码的问题,统一种编码。统一数据交互编码,统一数据库编码。

  1. 参考资料

1)  http://blog.csdn.net/zbyufei/article/details/5856730

2)  http://www.python.org/

时间: 2024-10-29 08:10:31

python字符编码(python2.6)的相关文章

python 字符编码处理问题总结 彻底击碎乱码!

Python中经常遇到这样的字符编码问题,尤其在处理网页源码时(特别是爬虫中): UnicodeDecodeError: 'XXX' codec can't decode bytes in position 12-15: illegal multibyte... 下面以汉字'哈'来解释作示例解释所有的问题,汉字"哈"的各种编码如下: 1  UNICODE(UTF8-16): 0xC854 2  UTF-8: 0xE59388 3  GBK: 0xB9FE 除此之外还有如gb2312,

Python字符编码详解(转)

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

python字符编码惯用法

本文总结在实际应用中遇到的python字符编码问题,制定一套编码相关的约定,避免编码上的错误. 在写猥琐宝典时需要总结soj上做过的题,准备在总结过程中顺便写一个soj上的题解.题解使用python可读,也就是python可以直接eval的格式,以便于处理.写题解老是copy soj上的题目id,title不是太方便,所以就准备自动生成一个空的题解,里面包含了我做过的题.然而直接从soj上只能拿到自己过了的题的id列表,缺乏其它信息.缺乏的信息可以抽象为soj数据库,其中包含了一个以id为主键的

第七章、Python字符编码

第七章.Python字符编码 一.定义 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码":反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密.在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码. 字符(Character):是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英

Python字符编码很难吗?今天一文带你深入!从此不再疑惑!

不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 encode.decode 函数翻来覆去的转换,有时试着试着问题就解决了,有时候怎么试都没辙,只有借用 Google 大神帮忙,但似乎很少去关心问题的本质是什么,下次遇到类似的问题重蹈覆辙,那么你有没有想过一次性彻底把 Python 字符编码给搞懂呢? 完全理解字符编码 与 Python 的渊源前,我们有

更改python字符编码以便使用UTF-8的编码url路径

url编码分两种, 一种是unicode, 另一种是gb2312, 今天遇到的一个网站是要将字符编码按照gb2312来编码,用来得到一个先填写blanks后再返回页面的数据,废话少说,需要做的就是先查看你的python的编码是啥,默认是ascii, ? 1 2 3 import sys print sys.getdefaultencoding() # 'ascii' 直接附代码吧: ? 1 import urllib as com ? 1 2 3 4 5 6 7 8 9 10 11 12 13

python 字符编码练习

通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # 不用参数encoding >>> b b'\x00\x01\x02 ... \xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' >>> b.decode('utf-8') # 报错 Traceback (most recent call l

python字符编码

1. 字符编码简介 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符) 后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 阶段二:为了满足中文,中国人定制了GBK GBK:2Bytes代表一个字符 为了满

【转】Python字符编码详解

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节