彻底搞懂 Unicode、UTF-8 及 Python encode()的机制、应用场景

本文科普了Unicode编码方式,重点讲解了UTF-8如何存储Unicode的二进制编码。在Python中,encode()函数将字符串转换为bytes类型,ASCII码表内的字符原样返回,而ASCII码表外的字符则先查找Unicode编码再进行编码。encode()主要用于不同语言间的交流,非ASCII字符编码后呈现16进制形式。

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

2.1.1 编码方式科普

(参考资料 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html)

Unicode 只是一个符号集,它只规定了符号的 二进制代码 ,却没有规定这个二进制代码应该 如何存储

其中有的字符只有 1B ,有的有 4B ,多出来的会有很多 0 ,这不太好,那有什么办法呢?UTF-8 可以很好地解决这个问题,其他方式此处不做讨论

UTF-8 就是在互联网上使用最广的一种 Unicode 实现方式 ,解决了怎么存储 Unicode 中的二进制编码 ,存储方式如下:

UTF-8 编码
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

下面详细讲述 转换成 utf-8 :

  1. 拿到 的 unicode 编码 '\u4e00' (可以用python报错或baidu)
  2. calc 计算一下 4e00100 1110 0000 0000
  3. 填入上面表格( 15 - 6 - 6 - 3 ) 得到 11100100 10111000 10000000
  4. calc 计算 11100100 101110 001000 0000E4 B880
  5. python 验证 的 utf-8 编码
test_str = '一'
print(test_str.encode())

2.1.2 Python encode() 详解

  • ASCII码表内字符:变成 bytes 类型原样返回
  • ASCII码表外字符:先 查找 到 unicode 编码,再进行储存方式上的编码,返回类型也是 bytes
test_str = 'My name is Ståte'
print(test_str.encode()) # > b'My name is St\xc3\xa5te'

证明:encode() 查找到 Unicode 编码, 进行其他编码

test_str = '一'
print(test_str.encode('ascii'))
# 写一个报错程序,它会提示你 'ascii' codec can't encode character '\u4e00' 
# 这说明了有一个转换步骤 先拿到了 一 的 Unicode 码

2.1.3 encode() 看法

刚学的时候感觉很奇怪,为什么 非ASCII码内字符 encode 后是16进制,而 ASCII码内字符 encode 后不变

后来想清楚了,encode 主要用于不同语言之间的交流,而 ASCII码内字符 几乎同全球通用的,没必要利用 Unicode 再中转一下

2.1.4 补充

函数说明
ord('character')返回某个字符的 Unicode 值,10进制
chr(number)查询一个 10进制 Unicode 值对应的字符
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值