当前位置: 首页 > news >正文

字符编码:ASCII 和 Unicode

ASCIIUnicode都是计算机用来表示字符的编码标准。简单来说,ASCII 是 Unicode 的子集,Unicode 是现代编程的通用标准。

一、ASCII:早期的字符集

ASCII(美国信息交换标准代码)诞生于 1960 年代,是计算机最基础的字符编码标准。它用7 位二进制表示一个字符,总共可以表示 128 个字符(0-127)。

┌─────────────────────────────────────────────────────────────┐ │ ASCII 字符集 (0-127) │ ├───────────────┬─────────────────────────────────────────────┤ │ 0-31 │ 控制字符(不可打印) │ │ 32 │ 空格 │ │ 33-47 │ ! " # $ % & ' ( ) * + , - . / │ │ 48-57 │ 0-9(数字) │ │ 58-64 │ : ; < = > ? @ │ │ 65-90 │ A-Z(大写字母) │ │ 91-96 │ [ \ ] ^ _ ` │ │ 97-122 │ a-z(小写字母) │ │ 123-127 │ { | } ~ DEL(删除) │ └───────────────┴─────────────────────────────────────────────┘

特点

  • 只支持英文字母、数字、标点符号

  • 无法表示中文、日文、韩文等非英语字符

Python 示例

# 字符 ↔ ASCII 码转换 print(ord('A')) # 65 print(chr(65)) # 'A' print(ord('0')) # 48 print(chr(97)) # 'a'

二、ASCII 的局限:多语言无法兼容

ASCII 只用了 7 位,而计算机存储的基本单位是字节(8 位),多出来的 1 位是空闲的。于是各国开始用这多出来的一位来定义自己的编码:

编码语言说明
GB2312/GBK中文中国国家标准
Shift-JIS日文日本标准
EUC-KR韩文韩国标准

问题

  • 同一个 0x80-0xFF 字节,在不同国家编码中代表不同字符 →乱码

  • 不同语言编码互不兼容 →无法混合使用

三、Unicode:统一所有字符的万国码

Unicode的目标是统一世界上所有文字,为每一个字符分配一个唯一的编号(码点,Code Point)。

相关概念:

1. 码点(Code Point)
每一个字符对应的唯一数字编号。

┌─────────────────────────────────────────────────────────────┐ │ Unicode 码点示例 │ ├─────────────────────────────────────────────────────────────┤ │ 'A' → U+0041 │ │ '中' → U+4E2D │ │ '😊' → U+1F60A │ │ 'DŽ' → U+01C4 │ └─────────────────────────────────────────────────────────────┘

2. 平面(Plane)
Unicode 目前有 17 个平面,每个平面包含 65536 个码点。

平面范围内容
BMP(基本多文种平面)U+0000 ~ U+FFFF最常用字符(含中文、英文、常用符号)
辅助平面U+10000 ~ U+10FFFF生僻字、Emoji(如 😊)

3. 编码方式:UTF-8、UTF-16、UTF-32

Unicode 只是给字符分配了编号,还需要规定这个编号在计算机中如何存储,这就是UTF-8、UTF-16、UTF-32

编码可变长特点适用场景
UTF-8是(1-4 字节)兼容 ASCII,节省空间互联网标准,最常用
UTF-16是(2 或 4 字节)对中文等较紧凑Windows、Java 内部
UTF-32否(4 字节)固定长度,处理快内存大、处理方便的场景

UTF-8 的编码规则:

┌─────────────────────────────────────────────────────────────┐ │ UTF-8 编码规则 │ ├───────────────┬─────────────────────────────────────────────┤ │ 码点范围 │ UTF-8 字节序列 │ ├───────────────┼─────────────────────────────────────────────┤ │ U+0000 ~ U+007F│ 0xxxxxxx(1字节,兼容 ASCII) │ │ U+0080 ~ U+07FF│ 110xxxxx 10xxxxxx(2字节) │ │ U+0800 ~ U+FFFF│ 1110xxxx 10xxxxxx 10xxxxxx(3字节) │ │ U+10000~U+10FFFF│ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(4字节)│ └───────────────┴─────────────────────────────────────────────┘

Python 示例

# 字符 → Unicode 码点 print(hex(ord('A'))) # 0x41 print(hex(ord('中'))) # 0x4e2d # 码点 → 字符 print(chr(0x4E2D)) # '中' print(chr(0x1F60A)) # '😊' # UTF-8 编码 print('中'.encode('utf-8')) # b'\xe4\xb8\xad' print('中'.encode('utf-8').hex()) # e4b8ad

四、ASCII 和 Unicode 的关系

  • ASCII 是 Unicode 的真子集:ASCII 的 0-127 个字符,在 Unicode 中的码点相同,也是 U+0000 ~ U+007F

  • UTF-8 编码中,ASCII 字符占 1 字节,完全兼容 ASCII,所以很多文本文件看不出区别。

五、其他

场景建议
内部处理使用 Unicode 字符串(Python 3 默认)
网络传输/文件存储使用UTF-8编码
打开文件指定encoding='utf-8'
HTTP 响应设置Content-Type: text/html; charset=utf-8
数据库连接字符集设置为utf8mb4(MySQL)或UTF-8(PostgreSQL)

Python 示例

# 写入 UTF-8 文件 with open('file.txt', 'w', encoding='utf-8') as f: f.write('Hello 世界 😊') # 读取 UTF-8 文件 with open('file.txt', 'r', encoding='utf-8') as f: content = f.read() print(content)
概念说明
ASCII7 位编码,128 个字符,仅支持英文
Unicode统一字符集,为每个字符分配唯一码点
UTF-8Unicode 的存储方式,变长编码,兼容 ASCII
Python 3字符串默认使用 Unicode

其实ASCII 是过去时,而Unicode 是现在时,UTF-8 是通用存储格式。 在 Python 3 中,字符串默认就是 Unicode,读写文件时记得指定encoding='utf-8'

http://www.jsqmd.com/news/1236600/

相关文章:

  • 5分钟革命性转变:让GIMP秒变Photoshop的突破性方案
  • SVG Wave 性能优化:如何生成高质量的 SVG 波浪文件
  • efaqa-corpus-zh:中文心理咨询领域首个开放QA语料库,20000+标注对话深度解析
  • ares跨平台模拟器架构解密:精准性与多系统支持的技术实现
  • 合肥庐阳区品LV、爱马仕完整出手教程,2026闲置箱包变现在逸程一步到位 - 逸程奢侈品回收中心
  • 2026年7月最新唐山市丰南区亨得利官方名表服务中心电话公示 - 亨得利官方博客
  • 【UE4】VS2022编译UE4.26.2工程问题记录
  • FreeCAD深度解析:开源参数化3D建模的架构设计与实战应用
  • 2026上海汽车贴膜店热门车型实测:小米SU7、尊界、腾势D9车主都选哪家? - GrowUME
  • 终极语音合成技术盘点:TTS-papers中的10大核心模型深度对比
  • 南京黄金回收,足金首饰变现前必须知道的3个硬条件 - 二奢分享官
  • 在线去水印用什么工具?盘点几款好用的图片视频解析网站 - 办公小帮手
  • Stable-Baselines3 回调函数与超参数调优终极指南
  • Pyro4开发者指南:构建高性能分布式应用的最佳实践
  • 今天准备打印左右的时候,突然打印不了,故障码p07,型号是佳能G2810,问了售后,说要拿到店维修,费用大概280块,太贵了吧,没去,隔了几天后发现了一个清零软件,抱着试一试的心态,竟然清零就修好了。
  • 如何在Windows、Linux和macOS上快速下载iOS应用包?终极跨平台解决方案指南
  • 2026镇江第三方验房检测排名 TOP5 CMA 资质提供房屋质量检测、水电验收、墙面地面检测一站式服务 联系方式推荐 - 科信检测
  • HarmonyOS应用开发实战:小事记 - @ohos.net.http 网络请求:http.createHttp 的请求生命周期管理与错误处理
  • 掌握Uptime Kuma:打造高效自托管监控系统的完整指南
  • 为什么Momentum-Firmware成为Flipper Zero社区的技术标杆?
  • GitHub Copilot SDK RPC Shell和Fleet:命令行和舰队模式的终极集成指南
  • 萧邦中国官方售后服务中心|服务热线及全部官方地址权威信息通告(2026年7月更新) - 萧邦中国官方服务中心
  • Spring Boot 3 + Vue 3 个性化定制服装订单管理系统源码前后端分离
  • 2026常州黄金回收本地5店单克价差对比 - 商业快讯早知道
  • 2026年度盐城标书代写机构综合实力排行|正规电子标制作投标文件编制专业推荐 - 安华招标
  • 小智ESP32:基于MCP协议的边缘AI语音交互系统深度技术解析
  • SRS媒体服务器完全指南:从入门到精通的9大核心功能解析
  • HarmonyOS应用开发实战:小事记 - 日历事件导入:@ohos.calendar 的日历读写与事件同步
  • 从数学定理到实战代码:一文搞定“向量组线性表示”及其工业级应用
  • 2026株洲电能质量评估检测排名 TOP5 CMA 资质提供电网谐波、闪变波动、功率因数上门检测一站式服务 联系方式推荐 - 鉴安检测