python与编码
来源:互联网 发布:程序员需求量 编辑:程序博客网 时间:2024/06/03 17:21
Python的诞生时间比Unicode要早很多,所以早期Python版本的默认编码是ASCII,现在python2依然默认是ASCII编码,而python3默认是utf-8。
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串’ABC’在Python内部都是ASCII编码的。Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换:
>>>ord('A')65>>>chr(65)A
Python在后来添加了对Unicode的支持,以Unicode表示的
字符串用 u’…’表示,python默认是unicode表示的字符串,所以通常不写u。
python3中str字符串类型在内存中存的是Unicode数据,bytes类型字符串存储的是bytes数据。如下:
name0 = 'abc'name1 = b'abc'name2 = '二刚'name3 =u'二刚'print(type(name0))print(type(name1))print(type(name2))print(type(name3))print(repr(name0))print(repr(name1))print(repr(name2))print(repr(name3))
运行结果:
<class 'str'><class 'bytes'><class 'str'><class 'str'>'abc'b'abc''二刚''二刚'
u’中’和u’\u4e2d’是一样的,\u后面是十六进制的Unicode
码。又如,u’A’和u’\u0041’也是一样的。
把u’xxx’转换为UTF-8编码的’xxx’用encode(‘utf-8’)方法,即编码例如:
>>>u'ABC'.encode('utf-8')b'ABC'>>>u'中文'.encode('utf-8')b'\xe4\xb8\xad\xe6\x96\x87'>>>len(u'ABC')3>>>len(b'ABC')3>>>len(u'中文')2>>>len('\xe4\xb8\xad\xe6\x96\x87')6
英文字符转换后表示的UTF-8的值和Unicode值相等(但占用的存储空间不同),而中文字符转换后1个Unicode字符将变为3个UTF-8字符,你看到的\xe4就是其中一个字节,因为它的值是 228,没有对应的字母可以显示,所以以十六 进制显示字节的数值。len()函数可以返回字符串的长度.
**反过来,把UTF-8编码表示的字符串’xxx’转换为Unicode字符串
u’xxx’用decode(‘utf-8’)方法,即解码**例如:
>>>b'abc'.decode('utf-8')'abc'>>>b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')'中文'或 u'\u4e2d\u6587'
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
简单的总结一下编码bytes数据是为了方便传输与存储,而Unicode数据方便了显示
- Python:编码与字符串
- Python字符串与编码
- python 编码与解码
- Python---解码与编码
- python与编码
- 编码与Python逻辑运算
- python decode()、encode() 、编码与反编码
- 字符串编码与Python 3编码
- 字符串编码与Python 3编码
- Python的编码与解码
- python 字符串编码与解码
- Python编码声明与乱码
- Python 编码与解码1
- Python中的编码与解码
- python 的编码与解码
- 编码与解码(python 经验)
- python-url编码与解码
- Python环境编码与MySQL中文编码操作
- 理解javas原型
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- redis特性之多数据库及jedis操作
- java基础编程:输出九九乘法表
- Linux内核调试技术——kprobe使用与实现
- python与编码
- 2017百度之星初赛(B)1001Chess------hdu6114
- 工作安排--网易2017春招实习笔试编程题6
- poj2983(查分约束)
- style与className
- hdu 6114/2017百度之星预赛B Chess(找规律)
- servlet编码问题
- Concepts Nrec AxCent +PumPal +MAX-PAC
- datagrid toolbar犯得一大错误