相关阅读:字符集(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,包括但不限于以下几种:

  1. Python:在Python 3.x版本中,字符串默认使用UTF-8编码。而在Python 2.x版本中,默认的编码方式是ASCII。
  2. CSV文件:新建的txt文件和wps文件默认是ANSI编码格式,而CSV文件的编码格式可以被修改为UTF-8。
  3. Web开发:网页开发中的HTML和HTTP协议默认使用UTF-8编码。
  4. 数据库:许多数据库系统,如MySQL、PostgreSQL和SQLite等,默认使用UTF-8编码存储和检索数据。
  5. 文本编辑器:许多文本编辑器,如Sublime Text、Notepad++和Visual Studio Code等,默认使用UTF-8编码打开和处理文本文件。
  6. 邮件系统:一些邮件系统,如Outlook和Gmail等,默认使用UTF-8编码发送和接收邮件。
  7. 操作系统:许多操作系统,如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

  1. 进行编码str.encode("编码")
  2. 进行解码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
  1. 这里可以看到abcd以及7890都是不需要转码存储的。
  2. 在utf-8格式下,每3个\x代表一个汉字,“\xe5\x95\x8a\”代表“啊”;“\xe5\x91\x83”代表“呃”;每个中文字占用3个字节。
  3. 在gbk格式下,  每2个\x代表一个汉字,“\xb0\xa1”代表“啊”;“\xdf\xc0”代表“呃”;每个中文字占用2个字节。
  4. 在utf-8格式下,每个字母或者数字占用1个字节。字母a应该表示为01100001。显示还是abcd,每个元素只占用1个字节空间。
  5. 在gbk格式下,  每个字母或者数字占用2个字节。字母a应该表示为00000000 01100001。显示虽然还是abcd,只是每个元素多占用了一个字节空间。

Python——第二章:字符的编码encode和解码decode的更多相关文章

  1. Python中编码encode()与解码decode()

    1 print('这是编码'.encode('utf-8')) # 结果 b'\xe8\xbf\x99\xe6\x98\xaf\xe7\xbc\x96\xe7\xa0\x81' 2 print('这是 ...

  2. Java如何进行Base64的编码(Encode)与解码(Decode)?

    https://blog.csdn.net/zhou_kapenter/article/details/62890262 *************************************** ...

  3. Java进行Base64的编码(Encode)与解码(Decode)

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

  4. Java如何进行Base64的编码(Encode)与解码(Decode)

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

  5. Python编码(encode)和解码(Decode)常见的两个错误

    项目地址:https://git.io/pytips 0x07 和 0x08 分别介绍了 Python 中的字符串类型(str)和字节类型(byte),以及 Python 编码中最常见也是最顽固的两个 ...

  6. Python 编码encode()、 解码decode()问题

    乱码这种东西,时不时出现.本来开开心心想着我要学习啦,然后兴高采烈打开了比火星文还火星文的字符-- 没事,我可以搞定这堆鬼画符. 先来讲一下为什么有乱码这种东西的存在 故事是这样滴: 字符串是Pyth ...

  7. C++字符数字的编码(Encode)与解码(Decode)

    在日常应用中,我们常用结构体或者类来存储一条信息,这种方式很方便,但是不利于数据的传输.例如在网络编程中,我们需要将结构中的数据转化为字节流才能进行传输,我们可以利用memcpy强行将结构化的数据转化 ...

  8. Swift学习笔记 - URL编码encode与解码decode

    使用swift有一段时间了,api的变换造成了很多困扰,下面是关于url编码和解码问题的解决方案 在Swift中URL编码 在Swift中URL编码用到的是String的方法 func addingP ...

  9. CS程序中XML编码Encode和解码Decode

    VB6的代码,原则上只要是Windows系统均可以使用此方法 Function XMLEncode(ByVal text As String) As String Dim xmldoc Set xml ...

  10. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

随机推荐

  1. Java并发Map的面试指南:线程安全数据结构的奥秘

    简介 在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域.然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据.当多个线程同时访问和修改共享数据时,很容易出现各种问题 ...

  2. pyinstall打包相对路径问题

    pyinstall打包相对路径问题 ​ pyinstaller 打包py文件成exe文件,在没有python的机器上运行,执行打包后的程序,经常会出现程序使用的图标无法显示,程序使用的关联文件无法关联 ...

  3. 理解并掌握C#的Channel:从使用案例到源码解读(一)

    引言 在C#的并发编程中,Channel是一种非常强大的数据结构,用于在生产者和消费者之间进行通信.本文将首先通过一个实际的使用案例,介绍如何在C#中使用Channel,然后深入到Channel的源码 ...

  4. 深入理解 Socket 编程:网络通信的基石

    深入理解 Socket 编程:网络通信的基石 引言 在现代计算机网络中,网络通信是各种应用程序之间进行数据交换和信息传输的基础.Socket 编程是实现网络通信的关键组件之一,它提供了一种方便而强大的 ...

  5. 单元测验4:人格知识大比武2mooc

    单元测验4:人格知识大比武2 返回 本次得分为:10.00/10.00, 本次测试的提交时间为:2020-09-06, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(2分) 关于M ...

  6. Java虚拟机(JVM):第六幕:自动内存管理 - 选择合适的垃圾收集器

    前言:在虚拟机的世界里面,内置了很多的垃圾收集器,但并不是说最先进的就是最好的.有一句话说的好"因地制宜": 一.Epsilon收集器 是一个无操作的收集器,但是贴切的来说是&qu ...

  7. 手写商用Java虚拟机HotSpot,疯狂磨砺技术中

    在当前Java行业激烈竞争的形式下,唯有掌握技术,心中才不能慌.在多年前,我就开始苦练底层技术,但是眼看百遍也不如手过一遍,所以我打算把虚拟机的精华实现部分用手敲出来,这个过程注定不会轻松,但是心态不 ...

  8. 深度解读MediaBox SDKs如何实现技术架构升级

    本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构.技术性能.开发能效和最佳实践,一起开启音视频的开发之旅.本文为MediaBox技术架构篇,重点从音视频终端SDK ...

  9. Linux g++减小可执行文件大小

    去掉参数-g,产生不带有调试信息的可执行文件 加上参数-O2,产生尽可能小和尽可能快的代码 strip 可执行文件 去掉目标文件中的一些符号表.调试符号表信息,以减小程序的大小 参考文献: g++重要 ...

  10. ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级

    ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级 1.ChatGLM3简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型.Chat ...