笼统点说:
unicode编码
unicode编码对所有语言的字符都采用两个字节表示,不会有乱码。
utf-8
utf-8是可变字节,表示英文字母用一个字节(8位),表示中文字用三个字节(24位),节省计算机的存储空间。
多字节
多字节也是可变字节,windows搞出来的,和utf-8一个意思。
unicode编码下,字符串对应的类型:wchar_t / WCHAR
多字节编码下,字符串对应的类型:char/CHAR
char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’中’)用3个char(三个字节)表示。
字符串在内存中统一使用unicode编码,当字符串用来存储和传输是使用utf-8编码。
详细点说:
unicode是charset(字符集),包括GBK,GBK2312也是字符集。
utf-8是encoding(编码):多字节编码,对英文使用8位(1个字节),对中文使用24位(3个字节)编码。utf-8是在unicode这个字符集基础上的一种具体的编码方案,为了更好的存储和传输,还有utf-16,utf-32等。
平时我们读取utf-8编码保存的txt文件的原理:
文本文档是utf-8编码保存的,这样可以最大限度的节省空间。但是当对文档进行操作时,计算机会先把utf-8转换为unicode然后放在内存中,保存时又将unicode转换为utf-8。
Python3的字符串的编码语言用的是unicode编码,由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干字节,如果要在网络上传输,或保存在磁盘上就需要把str变成以字节为单位的bytes。
python中字符串前面加u,r,b的含义
1、字符串前加 u
例:u"我是含有中文字符组成的字符串。"
作用:
后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
2、字符串前加 r
例:r"\n\n\n\n” # 表示一个普通原生字符串 \n\n\n\n,而不表示换行了。
作用:
去掉反斜杠的转义机制。
(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
应用:
常用于正则表达式,对应着re模块。
3、字符串前加 b
例: response = b'<h1>Hello World!</h1>' # b' ' 表示这是一个 bytes 对象
作用:
b" "前缀表示:后面字符串是bytes 类型。
用处:
网络编程中,服务器和浏览器只认bytes 类型数据。
如:send 函数的参数和 recv 函数的返回值都是 bytes 类型
附:
在 Python3 中,bytes 和 str 的互相转换方式是
str.encode('utf-8')
bytes.decode('utf-8')
如果打印出来的字符串是b‘xxxx’,可以使用c2=str(c1,'utf-8'),打印出‘xxxx’
网友评论