ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

      • 常见规范与运行方式
      • 变量与垃圾回收机制
      • 输入与格式化输出
      • 运算符
      • 流程控制语句
      • 浅拷贝和深拷贝
      • 常用数据类型与分类
      • 数据类型方法
      • 字符编码
        • 字符编码
        • python如何保存字符串类型
        • python的编码与解码
      • 文件操作
      • 函数与参数
      • 命名空间与作用域
      • 闭包函数与装饰器
      • 迭代器与生成器
      • 三元表达式与生成式
      • 函数递归
      • 面向过程式和函数式编程
      • 模块与包
      • 程序设计目录参考
      • 常用内置模块或函数
      • 序列化和猴子补丁
      • 日志模块-logging
    • 类与面向对象

    • 并发编程

    • Web编程

    • 模块笔记

    • 其他

  • C笔记

  • C++笔记

  • Arduino笔记

  • Dev
  • Python笔记
  • 基础知识
Hoshinozora
2023-02-15
目录

字符编码

# 字符编码

# 字符编码表

  • 就是字符与数字的对应关系表
  • 起到人与计算机交互的翻译作用

# 编码表发展

阶段1 - ASCII表

ASCII支持英文。

8位二进制对应一个英文字符。

阶段2 - GBK表

GBK支持中文、英文。

8位二进制对应一个英文字符。

16位二进制对应一个中文字符。

阶段3 - Unicode表

兼容万国字符,且与其他字符编码都有对应关系。

16位二进制对应一个字符。

个别生僻字会采用4或8位进制。

# utf-8

在Unicode表的基础上,使字符编码占用的空间更加精简。

会将英文字符转换成 1 bytes、汉字字符转换为 3 bytes。

其他国家的也有精简,但我们关注中英文即可。

# 内存中的编码

现在内存中统一使用Unicode字符表,在保存到磁盘时,可以转换为任意其他编码。

英文字符 —> unciode格式的数字 —> ASCII格式的数字。

中文字符、英文字符 —> unicode格式的数字 —> gbk格式的数字。

# 乱码的解决

存乱了,编码格式应该设置成支持文件内容字符的格式。

取乱了,文件以什么编码格式存入硬盘,就应该以什么编码格式读入内存。但如果存取都使用utf-8,则可以不用考虑这些问题。

# 结论

内存固定使用unicode,我们能改变的是存入硬盘采用的编码格式。

由于unicode比较大,所以在写入磁盘时,会带来更多的IO延迟。所以采用更加精简的utf-8。

# python如何保存字符串类型

# python2中

因为python2诞生时,unicode还没出来。如果文件头没有声明编码格式,还想让字符串不乱码,则需要在字符串前面加u,表示强制以unicode编码存入内存。否则会按照文件头指定的编码格式存入变量值的内存空间。

如:x=u"上下"

# python3中

str类型的值,默认以unicode格式存储到堆区。

# python的编码与解码

# 指定默认编码 - coding

指定解释器读取py文件时用的编码格式,可保证py文件在被解释器读取时不会乱码。

python2中,默认使用ASCII。

python3中,默认使用utf-8。

指定解释器默认使用的编码:# -*- coding: utf-8 -*- 或者 # coding=utf-8

在py文件的头部声明编码格式,放在指定解释器行的下面。

例如:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
1
2

# 字符串编码 - encode

str.encode("编码格式")

指定编码格式对字符串进行编码,unicode —> 指定编码格式。

例如:

"测试".encode("utf-8")
>> 输出 b'\xe6\xb5\x8b\xe8\xaf\x95'
1
2

# 字符串解码 - decode

str.decode("编码格式")

指定编码格式对字符串进行解码,指定编码格式 --> unicode。

例如:

b'\xe6\xb5\x8b\xe8\xaf\x95'.decode("utf-8")
>> 输出 '测试'
1
2

# bytes类型转换

bytes("测试", encoding="utf-8")

同等于 "测试".encode("utf-8")

#字符编码#编码解码
数据类型方法
文件操作

← 数据类型方法 文件操作→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式