Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- 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 编码
- 可以使用中文么?🤔

# 定义汉字“一”的字符串
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 |
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()

f = open("oeasy.txt", "wb")
"\u4e00".encode("gbk")
f.write("一". encode("gbk"))
f.close()

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 编码

f = open("oeasy.txt", "wb")
f.write("一切". encode("gbk"))
f.close()


| 字符 |
字节 |
| 一 |
b"d2bb" |
| 切 |
b"c7d0" |
| 文档结尾 |
b"0a" |

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


| 字符 |
字节 |
| 一 |
b"e4b880" |
| 切 |
b"e58887" |
| 文档结尾 |
b"0a" |
- 这次研究读写文件中的中文编码
- 这样我们就可以对文件的编码和解码更加了解了
- 还有什么可以做的文件方面的操作么?🤔
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。