字符串的编码集|学习笔记

简介: 字符串的编码集

开发者学堂课程【Python 入门 2020年版字符串的编码集】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10288


字符串的编码集

 

内容简介:

一、字符编码

二、编码规则

 

一、字符编码

1.ASCII → Latin1 → Unicode编码

2.字符 → 数字编码存在一个对应的关系

3.使用内置函数 chr 和 ord 能够查看数字和字符的对应关系

(1)ord 获取字符对应的编码 ; chr 根据编码获取对应的字符

例如:

①print(ord( 'a' ))

运行: 97 (字符对应的编码)

②print(chr(65))

运行: A

③print(ord( '你' ))

运行: 20320

bin(20320) → 0b100111101100000

 

二、编码规则

使用 Unicode为每种语言的每个字符都设定了唯一的二进制编码,但是它还是存在一定的问题,不够完美。

例如,汉字“你" 转换成为一个字符结果是 ex4f6e ,转换成为二进制就是01001111  01100000,此时就有两个问题:

1.1001111(表示一个 Latin1符)  01100000(表示一个 Latin1符)

(1) 你占了两个字节,那么到底是一个汉字“你" , 还是两个 Latin1字符?

(2)假如规定所有的字符都使用16位,2个字节来表示.

例如:

00000000 01001111 → Latin

00000000 01100000 → Latin

以上有两个问题:

①00000000浪费了很多

②不是所有的字符都能用16位表示,可能还不够

例如:

若11100000 1001111 01100000

则: 00000000 00000000 01100000 → Latin

(2) 假如规定所有的字符都使用24位,3个字节来表示,则前面补的0更多,效率、存储的量就加大,也就更麻烦.

(3) 如果 Unicode进行了规定,每个字符都使用 n个八位来表示,对于 Latin1字符来说,又会浪费很多存储空间。

2. 为了解决这个问题,就出现了一些编码规则,按照一定的编码规则对 Unicode数字进行计算,得出新的编码。

在中国常用的字符编码有 GBK(国标扩,一个汉字占两个字节,简体中文),BIG5(繁体中文)和 utf-8(统一编码,一个汉字占三个字节,基本可以编世界上所有的语言)这三种编码规则。

3. 使用字符串的 encode方法,可以将字符串按照指定的编码格式转换称为二进制;使用 decode方法,可以将一个二进制数据按照指定的编码格式转换成为字符串。

例如:

(1)print( '你' , encode( 'gbk' ))

运行: b'\xc4\xe3'

(2)print(0xc4e3)

结果: 50195

①转化为二进制:

bin(0xc4e3)

结果: '0b1100010011100011'

②转化为十进制:

print(0xc4e3)

结果: 50403

(3)print( '你' . encode( 'utf8' ))

运行: b'\xe4\xbd\xa0'

①变回:

x = b'\xe4\xbd\xa0'

print(x.decode( 'utf8' ))

运行: 你

②转化为二进制:

bin(0xe4bda0)

结果: '0b111001001011110110100000'

4.什么叫乱码?

首先创建一个 txt文档,用 Edit with Notepad++软件打开,写一个你好保存,那么文件是以什么编码格式保存,则用 Edit with Notepad++软件打开,就可以看到是使用 UTF-8编码保存的,把你好删除保存,修改编码,点击编码字符集,用中文 GB2312(Simplified)打开,用 UTF-8读,再次在文本框中输入你好,则会出现乱码,当然以下方法也可以验证乱码:

(1)把 '你好' . 使用 gbk编码

①y = '你好' . encode( 'gbk' )

print(y)

运行: b '\xc4\xe3\xba\xc3\'

变回:

print(y. decode( 'gbk' ))

运行: 你好

y = '你好' . encode( 'gbk' )

print(y. decode( 'utf8' ))

报错,当然也不是所有的都会报错

③y = '你好' . encode( 'utf8' ) → utf8一个汉字转换成为三个字节

print(y)

运行: b '\xe4\xbd\xa0\xe5\xa5\xbd'

变回:

print(y. decode( 'gbk' )) →gbk一个汉字占两个字节

运行: 浣犲乀 #之所以会变成这样,是因为把\xe4\xbd转变成了一个字, \xa0\xe5转变成一个字, \xa5\xbd转变成一个字,则此时六个字节就变成了三个字

变回:

In : b'\xe4\xbd\'.decode( 'gbk' )

out : '浣'

print(y.decode( 'utf8' ))

运行:你好

#txt文本乱码,修改字符集,若是用 word则不能用记事本打开,会出现乱码,因为 word不止是我们写的字,它还有很多其他隐藏的特殊的东西.

相关文章
|
JavaScript 数据安全/隐私保护
41 # 编码的问题
41 # 编码的问题
62 0
|
2月前
|
存储
编码
编码。
67 7
|
5月前
|
Java
Unicode编码和中文互转(JAVA实现)
Unicode编码和中文互转(JAVA实现)
214 1
|
6月前
|
Python
Python字符串和字节使用正确的编码/解码
【5月更文挑战第6天】Python字符串和字节使用正确的编码/解码
37 2
|
PHP 数据安全/隐私保护
PHP函数学习:16进制ASCII转化为字符串加密解密
PHP函数学习:16进制ASCII转化为字符串加密解密
263 0
|
自然语言处理 C语言 Python
Python基础教程之字符串和编码
Python基础教程之字符串和编码
|
开发者 Python
字符串的编码|学习笔记
快速学习字符串的编码