0

0

字符集与字符编码总结

爱谁谁

爱谁谁

发布时间:2025-08-28 11:16:02

|

441人浏览过

|

来源于php中文网

原创

最近用python编写了一个简单的爬虫工具,用于从google play上获取游戏类应用的信息。在处理和存储爬取的数据时,我被编码问题困扰了一番,于是利用周末时间,深入研究了字符集和字符编码的基础知识。为了加深理解并方便日后参考,我在此记录这些知识。

  1. 字符集和字符编码的概念

字符集:指一个系统所支持的所有字符的集合。例如,ASCII(美国信息交换标准码)字符集,包含英文字符、阿拉伯数字等可显示字符,以及回车、换行等控制字符。常见的字符集还有GB2312、BIG5和Unicode等。

字符编码:字符集仅仅是字符的集合,它并不涉及字符在计算机中的存储方式。字符编码则定义了字符集中的字符在计算机中的存储和传输规则。

字符集 vs 字符编码:字符集是脱离计算机讨论的字符集合,而字符编码是与计算机直接相关的规则,规定了字符集中的每个字符如何在计算机中存储和传输。

  1. 常见字符集简介

以下按照出现时间从早到晚介绍几个常见的字符集:

(1) ASCII字符集 & 字符编码

ASCII是最早的字符集和编码,计算机刚出现时就使用ASCII,是目前最通用的单字节编码系统。

ASCII字符集的基本集包含128个字符,包括大小写英文字母、阿拉伯数字和标点符号等可显示字符,以及空格和回车等控制字符;扩展集包含另外128个字符,涵盖部分西欧语言的字符。因此,整个ASCII字符集定义了256个字符。计算机中,一个字节(8个bit)即可编码ASCII字符集的所有字符,基本集只使用一个字节中的低7位。

ASCII支持的所有字符及编码规则可以通过http://www.asciitable.com/查看。

(2) GB*字符集 & 字符编码

在介绍具体字符集前,先介绍多字节编码系统(MBCS)。由于许多地区的语言无法用ASCII表示,而ASCII流行,新的字符编码必须与ASCII兼容,因此MBCS设计为:ASCII基本集字符仍使用与ASCII相同的编码规则,如果第一个字节的值小于0x80,则表示一个ASCII基本集字符;如果大于或等于0x80,则与下一个字节一起表示一个ASCII基本集外的字符。MBCS不是特定的编码,而是一个统称,包括GB***、BIG***等。

微软Windows中的“ANSI”不是特定编码,而是指“当前地区使用的默认字符编码”,例如在中国,ANSI指GBK。

常见的中文字符集有GB2312和GBK。GB指代国标,全称中华人民共和国国家标准,2312是标准号。GB2312(具体为GB 2312-80)中文全称为“信息交换用汉字编码字符集 基本集”,主要用于中国大陆和新加坡等地。GB2312涵盖了大部分汉字,但无法处理一些生僻字。

作为GB2312的扩展,微软利用GB2312中未使用的编码空间,制定了GBK字符编码。“K”指代“扩展”中的“扩”。GBK收录了更多的汉字字符,但编码方式与GB 13000.1-93不同。GBK不是国家标准,而是由国家技术监督局标准化司和电子工业部科技与质量监督司发布的技术规范指导性文件。

(3) BIG***字符集 & 字符编码

常见的有BIG5字符集及编码。BIG5是繁体中文社区中最常用的字符集标准,主要用于港澳台等繁体中文通行区。BIG5不是国家标准,而是业界常用标准。BIG5编码属于MBCS,使用两个字节存储一个字符,并有“造字区”供用户自定义字符。例如倚天中文系统、Windows等操作系统支持BIG5字符集和编码,并定义了自己的造字区,因此BIG5有多个派生版本。

樱桃企业网站管理系统3.1 bulid20130614
樱桃企业网站管理系统3.1 bulid20130614

樱桃企业网站管理系统全DIV+CSS模板,多浏览器适应,完美兼容IE6-IE8,火狐,谷歌等符合标准的浏览器,模板样式集中在一个CSS样式中,内容与样式完全分离,方便网站设计人员开发模板与管理。系统较为安全,以设计防注入,敏感字符屏蔽,适合新手自己操作修改。新闻,产品,单页独立关键字设计,提高搜索引擎收录。 后台地址:admin/login.asp 后台账户:admin 密码:admin (

下载

(4) Unicode字符集及其字符编码

像中文使用的GB2312、BIG5一样,其他非英文国家和地区也创造了自己的字符集和编码。这些在当地使用没有问题,但在互联网传播时会变成乱码。Unicode就是为了解决这个问题而创建的。Unicode字符集定义了超过10万个字符,几乎涵盖了所有国家和地区的字符,并还在不断收录新字符。Unicode是一个字符集,不是字符编码规则,而UTF-8、UTF-16和UTF-32是Unicode字符集的几种编码规则。

UTF-32规定所有Unicode字符使用32个bit(4个字节)存储,足以编码目前所有Unicode字符。UTF-16对Unicode索引在2^16以内的字符使用2个字节存储,对索引在2^16以外的字符使用特殊技巧处理。UTF-32和UTF-16有固定字节数存储字符的优点,但由于计算机存储的大端和小端规则不同,需要在文件开头定义BOM(Byte Order Mark)来判断文件的存储规则。

UTF-8是Unicode字符集的另一种编码方式,使用1到4个字节编码Unicode字符。UTF-8与ASCII兼容,ASCII字符在UTF-8编码时与ASCII编码一致。UTF-8的编码规则可以简单描述为:单字节符号的第一位设为0,后面7位为Unicode码;对于n字节符号(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位设为10,剩余位为Unicode码。

在Windows记事本中,“Unicode”和“Unicode big endian”选项实际上指代的是UCS-2编码方式,分别以小端和大端规则存储。

  1. Python 常见字符编码问题

介绍完字符集和字符编码的基础知识,下面总结几个Python中常见的字符编码问题。

注释头部的“# -- coding: xxxx --”:告知Python解释器程序文件中使用的编码方式,以便正确理解其中的字符串。保存文件时应与注释头中声明的编码方式一致,否则可能导致Python解释器以错误的编码规则解释字符,产生非预期结果。

unicode类和str类:unicode是“字符串”,str是“字节串”。以汉字“大”为例,声明unicode对象的方法为“u = u'大'”,声明str对象的方法为“s = '大'”。声明str对象时,Python根据文件头部的coding注释对字符进行编码,得到的字节串就是str的值。使用len()函数获取unicode对象的长度为1,而在UTF-8编码下,str对象的长度为3。

字符集与字符编码总结

encode() vs decode():对unicode对象使用encode()方法可将其按照某种编码规则编码,返回编码后的str对象;对str对象使用decode()方法可将其按照某种编码规则解码,返回解码后的unicode对象。

字符集与字符编码总结

文件读写:使用open()函数打开文件并用read()方法读取,得到的是str对象(字节串),可使用decode方法得到相应的unicode字符串。使用write()方法写文件时,如果参数是str对象,则直接写入字节串;如果是unicode对象,则使用.py文件头部的coding注释声明的编码进行encode操作,然后写入相应的字节串。

decode('unicode-escape'):常常令人迷惑。例如,

'\u5927'.decode('unicode-escape')
相当于取unicode字符集的第5927(16进制)号字符(https://www.php.cn/link/37c771d1bc9e621efc6c6c03c864f981

转载请注明出处。请前往 Tiga on Tech 查看原文以及更多有趣的技术文章。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1503

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

625

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

655

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

610

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

173

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

83

2025.08.07

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号