文章目录

  • 关于编解码
    • 编码的种类
  • 代码实现编解码
    • 常用字符串--字节转换
    • 字节样式字符串 编解码
    • url 编解码
    • 字节相加

关于编解码

编码/解码本质上是一种映射
字符a 用 ascii 编码则是65,计算机中存储为 00110101。
a 需要解码为 00110101,才能被计算机使用。

编码:真实字符与二进制串的对应关系,真实字符 → 二进制串
解码:二进制串与真实字符的对应关系,二进制串 → 真实字符

如:
UTF-8 --> decode 解码 --> Unicode
Unicode --> encode 编码 --> GBK / UTF-8 等


编码的种类

  • ASCII 占 1个字节,只支持英文
  • GB2312 占2个字节,支持 6700+ 汉字
  • GBK GB2312的升级版,支持 21000+ 汉字,中文2个字节。
  • Unicode 2-4 字节, 已经收录 136690 个字符
  • UTF-8:使用 1、2、3、4 个字节表示所有字符;
    优先使用1个字符、无法满足则使增加一个字节,最多 4个字节。
    英文占1个字节、欧洲语系占2个、东亚占 3个,其它及特殊字符占 4个,中文 3个字节。
  • UTF-16:使用2、4个字节表示所有字符;
    优先使用2个字节,否则使用4个字节表示。

ASCII 以 1字节 8个bit位表示一个字符,首位全是0,表示的字符集明显不够

unicode 编码系统是为表达任意语言而设计的,为了防止存储上的冗余(比如,对应ascii码的部分),其采用了变长编码,但变长编码给解码带来了困难,无法判断是几个字节表示一个字符

UTF-8 是针对unicode变长编码设计的一种前缀吗,根据前缀可判断是几个字节表示一个字符


Python 中的默认编码

  • Python2 中默认是ASCII码
  • Python3 中默认是unicode

代码实现编解码


常用字符串–字节转换

str = '你好'  # b'\xe4\xbd\xa0\xe5\xa5\xbd'   gbk:b'\xc4\xe3\xba\xc3'
str = 'abc'  # b'abc'
str = 'นั่ง'   # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88\xe0\xb8\x87'
str = 'นั่'  # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88'
# str = 2 # 'int' object has no attribute 'encode'
str = '*' # b'*'a = str.encode('UTF-8')
a = str.encode('gbk')# 中文不支持 ascii 编码
>>> str = 'abc123'
>>> str.encode('ascii')
b'abc123'

字节样式字符串 编解码

bytes 样式类型 主要在于使用 raw_unicode_escape 编码
unicode 样式类型 主要在于使用 unicode_escape 编码

str = '\xe5\x90\x8d\xe7\xa7\xb0'
str_b = str.encode("raw_unicode_escape") # b'\xe5\x90\x8d\xe7\xa7\xb0'
str_origin = str_b.decode("utf-8")  # '名称'

>>> u_code = 'abc你好123'.encode('unicode-escape') >>> u_code, type(u_code)
(b'abc\\u4f60\\u597d123', <class 'bytes'>)>>> u_str = 'abc\u4f60\u597d123'
>>> u_b = u_str.encode('unicode-escape')
>>> u_b, type(u_b)
(b'abc\\u4f60\\u597d123', <class 'bytes'>)... str2 = u_b.decode('utf-8')
>>> str2, type(str2)
('abc\\u4f60\\u597d123', <class 'str'>)>>> str3 = str2.encode()
>>> str3, type(str3)
(b'abc\\u4f60\\u597d123', <class 'bytes'>)>>> str4 = str3.decode('unicode-escape')
>>> str4, type(str4)
('abc你好123', <class 'str'>)

url 编解码

使用 urllib 库
参考: https://www.cnblogs.com/miaoxiaochao/p/13705936.html


str = '你好'
a = urllib.parse.quote(str)
print(a) # %E4%BD%A0%E5%A5%BDb = urllib.parse.unquote(a) # 你好

字节相加

b = b''
b += b'a'
b += b' b'print(b) b'a b'
print (b.decode('utf-8')) # a b

伊织 2022-06-24(五)

Python - 字符串编解码相关推荐

  1. Python进阶8——字典与散列表,字符串编解码

    Python用散列表来实现字典,散列表就是稀疏数组(数组中有空白元素),散列表中的元素叫做表元,字典的每个键值对都占用一个表元,一个表元分成两个部分,一个是对键的应用,另一个是对值的引用,因为表元的大 ...

  2. python 字符串 编码 解码_Python 字符串编解码研究

    Python 2.X 在输入汉字和特殊字符的时候,经常遇到编码解码的问题,究其原因,编译器默认将文件当做ascii编码,因此要正确的实现编解码的转换,需要进行一些设置. 首先让我们来了解几个概念. 文 ...

  3. python字符编码解码,文件编码解码。

    一.几个特别容易混淆和弄不清的概念 参考http://www.cnblogs.com/guosq/p/6378639.html 在python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目 ...

  4. iconv-lite,JS字符串编解码工具

    编码:字符串到二进制数据转换的过程.解码:二进制数据到字符串转换的过程. iconv-lite: Pure JS character encoding conversion 多种类型字符串(包括gbk ...

  5. 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode...

    原文网址:http://blog.csdn.net/trochiluses/article/details/16825269 摘要:在进行python脚本的编写时,如果我们用python来处理网页数据 ...

  6. python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  7. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  8. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  9. python 字符编码问题

    字符编码 一.字符编码的演进 ASCII GB2312    GBK1.0    GB18030 Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言.跨平台 ...

最新文章

  1. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
  2. 从事软件测试为什么要学自动化?
  3. Android判断CPU是否为x86,如何判断. NET 程序集是否编译为 x86,x64或者任何 CPU_visual-studio_开发99编程知识库...
  4. Android 线程管理
  5. 关于web.xml3.0启动报错
  6. Angular - 如何在页面加载后马上做初始化
  7. 文献记录(part95)--CCMS: A nonlinear clustering method based on crowd movement and selection
  8. [C++11]decltype在泛型编程中的使用举例
  9. mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构
  10. 第13章 使用ADO.NET访问数据库
  11. linux安装memcached(不错)
  12. python索引右往左_左手用R右手Python系列5——数据切片与索引
  13. (转)LuaPlus C++ 函数互调
  14. 【转载】一些重要的java知识点:JVM内存模型和结构
  15. 华为ENSP远程登录
  16. Java 在Word中创建表格
  17. Arduino ESP8266利用SPIFFS上传文件和查看文件
  18. 化工机械基础期末复习题及答案
  19. 【python】使用pyautogui进行屏幕捕捉实现自动化操作
  20. 开启人工智能的大门,引领AI时代

热门文章

  1. 黄帝内经.素问.五藏生成篇(10)
  2. 新人请多指教,自我介绍
  3. 遥望布达拉——DAY10 巴塘-海通兵站
  4. 互联网平台能否容纳下小米和雷军
  5. 分享一个你应该知道的健身俱乐部技巧
  6. excel文件损坏如何修复
  7. 微软 Office2021 横空出世 赶紧安装 Office Tool Plus v8.14.2
  8. 做一个网站/APP/小程序开发建设流程步骤
  9. 加水印教程、在线加图片水印(单行)
  10. 数据分析面试题——统计理论