Skip to content

Latest commit

 

History

History
224 lines (159 loc) · 4.65 KB

File metadata and controls

224 lines (159 loc) · 4.65 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0450
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

编码解码

回忆

  • 上次执行了外部的 os 命令
  • 然后在一个程序里面
  • 写了一个 python 程序
  • 然后用外部命令执行了这个命令
  • 不过事到如今
  • 有个小问题
  • 就是我们的字符编码都是英文的 ascii 编码
  • 可以使用中文么?🤔

询问ai

图片描述

# 定义汉字“一”的字符串
chinese_char = "一"

# 1. 编码为字节(以 UTF-8 为例,常用编码)
utf8_bytes = chinese_char.encode("utf-8")
print("UTF-8 编码的字节:", utf8_bytes)  # 输出:b'\xe4\xb8\x80'

# 2. 将字节解码回字符串(需与编码格式一致)
decoded_char = utf8_bytes.decode("utf-8")
print("解码后的汉字:", decoded_char)  # 输出:一

效果

  • 汉字编解码
    • 将 字节序列 解码为 字符
    • 将 字符 解码为 字节序列

图片描述

  • 我能用unicode编码
    • 直接输出吗?

询问

图片描述

print("\u4e00")  # 输出:一
  • 效果

图片描述

游乐场

  • 直接输出

图片描述

编码类型 编码值(十六进制) 编码表示形式 说明
Unicode U+4E00 \u4e00(字符串中) Unicode标准中“一”的唯一标识,十六进制表示,前缀“U+”为规范标记,字符串中常用“\u”加编码值表示
UTF-8 E4 B8 80 b'\xe4\xb8\x80'(字节形式) UTF-8编码方案对“U+4E00”的转换结果,由3个字节组成,字节形式中以“b'”开头,用“\x”加每个字节的十六进制值表示
  • 两者区别
    • Unicode是字符的“身份证”
    • UTF-8是其在计算机存储和传输中的“表现形式”

写入

f = open("oeasy.txt", "wb")
f.write("一". encode("utf-8"))
f.close()
  • 写入没有问题

图片描述

  • 能读出来么?

读取

f = open("oeasy.txt", "rb")
f.read()
f.seek(0)
bytes_str = f.read()
str_str = bytes_str.decode("utf-8")
print(str_str)
f.close()
  • 不但能读出来
    • 而且能解码

图片描述

  • 用什么编就用什么解
    • 解铃换需系铃人
  • 但这是utf-8
    • 可以用 gbk 来编解码么?

gbk 编码

f = open("oeasy.txt", "wb")
"\u4e00".encode("gbk")
f.write("一". encode("gbk"))
f.close()
  • gbk 两个字节搞定

图片描述

  • 顺利编码

gbk 解码

f = open("oeasy.txt", "rb")
f.read()
f.seek(0)
bytes_str = f.read()
str_str = bytes_str.decode("gbk")
print(str_str)
f.close()
  • gbk 解码成功
    • 用什么编就用什么解
    • 解铃还需系铃人
    • 其他的编码方式(如 Big5 等)也都类似
    • 最重要的 还是 utf-8 编码

图片描述

  • 1个汉字 2字节
    • 2个汉字呢?

两个汉字

f = open("oeasy.txt", "wb")
f.write("一切". encode("gbk"))
f.close()
  • 写了4个字节

图片描述

  • 写了哪四个字节?

观察文件

图片描述

:%!xxd
字符 字节
b"d2bb"
b"c7d0"
文档结尾 b"0a"

图片描述

  • 如果写成utf-8格式呢?

修改编码格式

f = open("oeasy.txt", "wb")
f.write("一切". encode("utf-8"))
f.close()
  • 结果

图片描述

打开文件

图片描述

字符 字节
b"e4b880"
b"e58887"
文档结尾 b"0a"
  • utf-8编码 结果 三个字节
    • 对比 gbk编码 两个字节

总结

  • 这次研究读写文件中的中文编码
    • 用什么编
    • 就用什么解
    • 解铃还需系铃人
  • 这样我们就可以对文件的编码和解码更加了解了
  • 还有什么可以做的文件方面的操作么?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。