python常用编码 Unicode & UTF-8

本文详细介绍了ASCII、Unicode和UTF-8三种编码方式的特点和适用场景,包括编码长度、编码规则及可表示字符范围等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在python中要使用中文的话,需要在前2行加入

# coding=utf-8

或者

# -*- coding: utf-8 -*-

因为python默认采用ASCII编码,而ASCII编码并没有包含中文字符。

计算机中以二进制来存储信息,计算机最先在美国出现,美国人用8 bit(即8个二进制码)来表示单个字符。

为了在计算机中使用中文,中国诞生了GB2312和GBX等中文编码,但是各个国家各自搞一套编码不好交流

ISO组织颁布了Unicode编码,后面又诞生了UTF-8。


一、ASCII 编码

1、编码长度:8位 ,定长

2、编码规则:

a、0x00~0x1f 及0x7f (共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、等;

ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。

b、32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。

c、65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

3、可用字符:英文,数字,半角符号


二、Unicode

1、编码长度:16位,定长

2、编码规则:Unicode 的编码方式与 ISO 10646 的通用字元集(亦称[通用字符集])(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应

于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示 216 个字符。基本满足各种语言的使用。实际上目前版本的 Unicode

  尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

3、可用字符:中文、英文、各国文字



三、UTF-8

1、编码长度:单字节字符8位,变长

2、编码规则:

a、单字节的字符,字节第一位为0,对于英文字母、数字和符号,UTF-8只占用一个字节,和ASCII码一样

b、多字节的字符(字符数为n,n>1),第一个字节前n位为1,第n+1为0,剩余的(n-1)个字节开头用10****** ,后面用Unicode补齐,同时高位补0

3、可用字符:中文、英文、各国文字


UTF-8是面向传输的,它在保证传输各国文字的同时,减少了传输过程中所需要的码元数量,简单来说流量和硬盘空间的消耗。


### Unicode 编码转换为 UTF-8 的方法 在 Python 中,可以通过 `encode` 和 `decode` 方法来完成 UnicodeUTF-8 的相互转换。以下是详细的说明以及代码示例。 #### 使用 encode 方法将 Unicode 转换为 UTF-8 字节流 当需要将一个 Unicode 字符串转换成字节形式时,可以调用字符串对象的 `.encode()` 方法,并指定目标编码格式为 `'utf-8'`[^2]。此操作会返回该字符串对应的字节数组表示。 ```python text = "你好,世界!" byte_data = text.encode('utf-8') print(f"Byte data: {byte_data}") # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81' ``` #### 使用 decode 方法将 UTF-8 字节流转回 Unicode 字符串 如果有一个以 UTF-8 形式的字节数组,则可通过 `.decode('utf-8')` 来将其解码还原成为原始的 Unicode 文本。 ```python decoded_text = byte_data.decode('utf-8') print(f"Decoded Text: {decoded_text}") # 输出 '你好,世界!' ``` #### 文件读写的例子 对于实际应用中的文件存储场景,也可以利用内置函数轻松实现数据持久化与恢复过程: ```python # 写入UTF-8编码的数据至文件 with open('output.txt', 'w', encoding='utf-8') as writer: writer.write(text) # 从文件中读取并验证内容一致性 with open('output.txt', 'r', encoding='utf-8') as reader: loaded_content = reader.read() assert loaded_content == text, "Data mismatch!" ``` 另外,在涉及 JSON 序列化的场合下,为了保持非 ASCII 字符不被转义,推荐设置参数 `ensure_ascii=False`[^3]^: ```python import json data = {"message": "你好"} json_str = json.dumps(data, ensure_ascii=False) print(json_str) # '{"message": "你好"}' ``` 以上即是在 Python 环境里处理 UnicodeUTF-8 及反向流程的具体方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值