编码方式


字符是文本的最小单元,每个字符对应唯一一个数字,叫做code point,code point可以是acii码格式,也可以是unicode

从code point 到实际的字节,这步叫做encoding,通常有utf-8等编码方式

Python2.x和Python3.x对字符编码有不同的处理方式,且在2.x中可以允许compatible object进行操作,但是3.x不允许mix types
1.Python2.x中str类型是二进制数据,包括了1byte内的简单字符和bytes(不科学),而unicode字符串是文本字符串。
  Python3.x中str类型包括了简单字符和unicode,bytes则为单独的类型。str->byte encode  byte->str decode
2. Python模块之codecs:自然语言编码转换,目前存在于2.x中,由于3.x的类型和2.x大不相同。
3. 可以在文件的开头使用 #coding=utf-8类似于批处理,规定了当前文件的编码格式,这样2.x的py文件中,就可以编写中文了
4. 可以使用charset模块,1)捕获当前string的编码格式,2)根据其编码格式将其转化为unicode,3)重新编码为utf-8格式

#将Unicode转换成普通的Python字符串:"编码(encode)"
unicodestring = u"Hello world"
utf8string = unicodestring.encode("utf-8")
asciistring = unicodestring.encode("ascii")
isostring = unicodestring.encode("ISO-8859-1")
utf16string = unicodestring.encode("utf-16")

#将普通的Python字符串转换成Unicode: "解码(decode)"
plainstring1 = unicode(utf8string, "utf-8")
plainstring2 = unicode(asciistring, "ascii")
plainstring3 = unicode(isostring, "ISO-8859-1")
plainstring4 = unicode(utf16string, "utf-16")

assert plainstring1==plainstring2==plainstring3==plainstring4


1.ASCII码:美国制定了一套字符编码,对英语字符和二进制位之间做了统一规定,被称为ASCII码,0-127共128个字符。

非英语国家的字符可以利用剩余的128-255进行编码,即不同语言的128-255段不是同的。

不足之处:但是这还是无法满足一些国家的文字,如汉字,多大10万左右,由此而引入了unicode编码方式。

2.unicode: Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS. UCS可以看作是"Unicode Character Set"的缩写。

Unicode将世界上所有的符号都纳入其中,每个符号的编码都不一样。

然而,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

不足之处:计算机如何区别unicode和ascII,如果unicode统一规定使用三个或者四个字节表示,那么英文必然有两到三个字节是0,这

对于存储来说是极大的浪费。但是由于互联网的出现,UTF-8 成为互联网上使用最广的一种unicode实现方式,即存储方式。

3.UTF-8:它是一种变长的编码方式,可以使用1-6个字节表示一个字符。

对于单字节的符号, 字节的第一位设为0, 后面7位为这个符号的unicode码. 因此对于英语字母, UTF-8编码和ASCII码是相同的.

对于n字节的符号(n>1), 第一个字节的前n位都设为1, 第n+1位设为0, 后面字节的前两位一律设为10. 剩下的没有提及的二进制位, 全部为这个符号的unicode码.

| Unicode符号范围 | UTF-8编码方式| (十六进制) | (二进制)
---+-----------------------+------------------------------------------------------
1  |  00000000- 0000 007F  | 0xxxxxxx
2  |  00000080- 0000 07FF  | 110xxxxx 10xxxxxx
3  |  00000800- 0000 FFFF  | 1110xxxx 10xxxxxx 10xxxxxx
4  |  00010000- 0010 FFFF  | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5  |  00200000- 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6  |  04000000- 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

4.GBK:一种对中文的拓展字符编码方式,即传说中的全角字符,而原来在127号以下的那些就叫"半角"字符。

GBK和Unicode的转化方式,只能通过查表进行。 http://www.gnu.org/directory/libiconv.html

参考文档:http://blog.csdn.net/tge7618291/article/details/7599902


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值