计算机编码

本文深入探讨了计算机如何识别和处理字符编码,从早期的ASCII编码到全球通用的Unicode编码,再到优化存储的UTF-8编码。解析了Python中不同编码间的转换及应用,适合对编码原理感兴趣的读者。

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

学习语言之前,来看看计算机是怎么识别你的代码的。。。

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)

如同电路只能识别'开'跟'关',计算机则只能识别 '0' 跟' 1'两个字符,就是说计算机只能识别‘二进制’语言。那么你想打印‘hello world’,计算机怎么识别并打印出来呢?

美国就创造了一套编码机制,用8位0,1,不同的排列组合表示不同的字符(数字,字母,特殊字符)。这就是最早的编码ASCII码。其中第128位是0111 1111:‘DEL’。(8位能表示2**8=256位字符)

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536

万国码:unicode :
A: 0000 0010 0000 0010 两个字节,表示一个字符。
中: 0000 0010 0000 0010 两个字节,表示一个字符。
后来加入的预言越来越多,再次升级:
A: 0000 0010 0000 0010 0000 0010 0000 0010 四个字节,表示一个字符。
中: 0000 0010 0000 0010 0000 0010 0000 0010 四个字节,表示一个字符。

所以Unicode对于美国来说,简直太浪费空间了。明明8位二进制(相当于1个字节)可以表示,却要用2个字节。所以,又创造了一个utf-8编码。

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

utf-8:最少用一个字节,表示一个字符.
A: 0000 0010
欧洲:0000 00100000 0010
中文:0000 00100000 00100000 0010

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果含有中文代码的话,需要告诉python解释器,用utf-8编码来执行源代码

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

gbk,这是国内创造的编码,简称国标

gbk国标。
A: 0000 0010
中: 0000 0010 0000 0010

编码之python:

python3x:
1,不同编码之间的二进制是不能互相识别的。
2,python3x

str内部编码方式(内存)为unicode
但是,对于文件的存储,和传输不能用unicode
bytes类型:内部编码方式(内存)为非unicode
#对于英文
str:
s = 'laonanhai' 表现形式
内部编码方式 unicode

bytes:
s1 = b'laonanhai' 表现形式
内部编码方式 非unicode (utf-8,gbk,gb2312....)
#对于中文:
str:
s = '中国'
print(s,type(s))
bytes:
s1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
print(s1,type(s1))

#转码

s = 'laonanhai'
s2 = s.encode('utf-8') #str -->bytes encode 编码
s3 = s.encode('gbk')
print(s2,s3)

s = '中国'
s2 = s.encode('utf-8') #str -->bytes encode 编码
s3 = s.encode('gbk')
print(s2)
print(s3)
ss = s2.decode('utf-8') # bytes ---> str decode 解码
print(ss)

转载于:https://www.cnblogs.com/lixiaoxuan/articles/8794668.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值