Python——第二章:字符的编码encode和解码decode
相关阅读:字符集(Character Set)和编码(Encoding)的历史演化
字符集和编码的总结:
1. ASCII编码: 8bit, 1byte => 256(最大可表示)
2. GBK编码: Windows系统默认 16bit, 2byte => 65536(最大可表示)
3. Unicode编码:32bit => 4byte => 4294967296(因为浪费,没法用, 只是一个标准)
4. UTF-8编码: MAC系统默认
- 英文: 8bit, 1byte => 256(最大可表示)
- 欧洲文字: 16bit, 2byte => 65536(最大可表示)
- 中文: 24bit, 3byte => 16777216(最大可表示)
5.GBK编码存储汉字(2byte)比UTF-8编码存储汉字(3byte)节省空间
6.GBK编码和UTF-8编码不能直接就进行转化。因为是2套标准,我军密码本(GBK) <-> 转文字 <-> 敌军密码本(UTF-8)
许多程序的默认编码都是UTF-8,包括但不限于以下几种:
- Python:在Python 3.x版本中,字符串默认使用UTF-8编码。而在Python 2.x版本中,默认的编码方式是ASCII。
- CSV文件:新建的txt文件和wps文件默认是ANSI编码格式,而CSV文件的编码格式可以被修改为UTF-8。
- Web开发:网页开发中的HTML和HTTP协议默认使用UTF-8编码。
- 数据库:许多数据库系统,如MySQL、PostgreSQL和SQLite等,默认使用UTF-8编码存储和检索数据。
- 文本编辑器:许多文本编辑器,如Sublime Text、Notepad++和Visual Studio Code等,默认使用UTF-8编码打开和处理文本文件。
- 邮件系统:一些邮件系统,如Outlook和Gmail等,默认使用UTF-8编码发送和接收邮件。
- 操作系统:许多操作系统,如Windows(非中文)、macOS和Linux(非中文)等,默认使用UTF-8编码处理系统内的文本文件。
需要注意的是,虽然UTF-8是许多程序的默认编码,但在处理特定数据时,可能需要根据具体情况选择其他编码方式。例如Xshell或者SecureCRT等网络连接工具,用于在计算机上远程访问和管理服务器。Xshell的默认编码方式是UTF-8,但也可以手动修改为其他编码方式。如果在使用SecureCRT时出现了中文乱码问题,可以尝试将SecureCRT的默认Default编码方式修改为UTF-8,或者确认服务器的编码方式,就可以正常使用中文了。
以下为华为交换机CloudEngine S8700的字符集编码情况:如果设备需要输入中文字符,如设备名称、描述信息等,可以先执行命令language character-set character设置系统字符集编码支持中文。设备支持GBK、UTF-8和ISO8859-1三种字符集编码。其中,ISO8859-1仅支持英文输入,GBK和UTF-8既支持中文输入又支持英文输入。如果用户需要在设备上输入中文,请结合终端登录软件(Xshell或者SecureCRT等)支持的字符集情况,选择设置系统的字符集为GBK或UTF-8。缺省情况下,系统的字符集编码为ISO8859-1。
Python字符的编码encode和解码decode
- 进行编码
str.encode("编码")
- 进行解码
bytes.decode("编码")
编码encode
s = "周杰伦"
bs1 = s.encode("gbk") # b'xxxx' bytes类型
bs2 = s.encode("utf-8")
print(bs1)
print(bs2)
#输出结果
b'\xd6\xdc\xbd\xdc\xc2\xd7'
b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'
在gbk编码下,每2个\x代表一个汉字(中文文档存储,更节省空间)
周 => \xd6\xdc
杰 => \xbd\xdc
伦 => \xc2\xd7
在utf-8编码下,每3个\x代表一个汉字(在程序代码方面,更通用)
周 => \xe5\x91\xa8
杰 => \xe6\x9d\xb0
伦 => \xe4\xbc\xa6
bytes类型的表示为:
b'\xd6\xdc\xbd\xdc\xc2\xd7'
怎么把一个gbk的字节转化成utf-8的字节?
解码decode
先解码变成文字符号(字符串)——再重新编码
bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
s = bs.decode("gbk") # 解码
print(s)
bs2 = s.encode("utf-8") # 重新编码
print(bs2)
#输出结果
周杰伦
b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'
扩展:
s = "abcd啊啊啊7890呃呃呃"
print(s.encode("utf-8"))
print(s.encode("gbk"))
#输出结果
b'abcd\xe5\x95\x8a\xe5\x95\x8a\xe5\x95\x8a7890\xe5\x91\x83\xe5\x91\x83\xe5\x91\x83'
b'abcd\xb0\xa1\xb0\xa1\xb0\xa17890\xdf\xc0\xdf\xc0\xdf\xc0
- 这里可以看到abcd以及7890都是不需要转码存储的。
- 在utf-8格式下,每3个\x代表一个汉字,“\xe5\x95\x8a\”代表“啊”;“\xe5\x91\x83”代表“呃”;每个中文字占用3个字节。
- 在gbk格式下, 每2个\x代表一个汉字,“\xb0\xa1”代表“啊”;“\xdf\xc0”代表“呃”;每个中文字占用2个字节。
- 在utf-8格式下,每个字母或者数字占用1个字节。字母a应该表示为01100001。显示还是abcd,每个元素只占用1个字节空间。
- 在gbk格式下, 每个字母或者数字占用2个字节。字母a应该表示为00000000 01100001。显示虽然还是abcd,只是每个元素多占用了一个字节空间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)