0

0

php各种编码集详解和以及在什么情况下进行使用

高洛峰

高洛峰

发布时间:2016-11-30 14:00:24

|

1281人浏览过

|

来源于php中文网

原创

字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ascii字符集、gb2312字符集、big5字符集、 gb 18030字符集、unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。本文将按照字符集的时间顺序讨论几种典型的字符集,选取几种代表性的中文字符集,研究历史由来、特点、技术特征。 

  ascii 字符集 

  1.名称的由来 

  ascii(american standard code for information interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统。 

  2.特点 

  它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准iso 646。 

  3.包含内容 

  控制字符:回车键、退格、换行键等。 

  可显示字符:英文大小写字符、阿拉伯数字和西文符号 

  4.技术特征 

  7位(bits)表示一个字符,共128字符 

  5.ascii扩展字符集 

  7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ascii进行了扩展,ascii扩展字符集使用8位(bits)表示一个字符,共256字符。 

  ascii扩展字符集比ascii字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。 

  gb2312 字符集 

  1.名称的由来 

  gb2312又称为gb2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。 

  2.特点 

  gb2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。 

  3.包含内容 

  gb2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 

  4.技术特征 

  (1)分区表示: 

  gb2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 

  各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。 

  (2)双字节表示 

  两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。 

  “高位字节”使用了0xa1-0xf7(把01-87区的区号加上0xa0),“低位字节”使用了0xa1-0xfe(把01-94加上0xa0)。 

  5.编码举例 

  以gb2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xa0得到程序的汉字处理编码0xb0a1。计算公式是:0xb0=0xa0+16, 0xa1=0xa0+1。 

  big5 字符集 

  1.名称的由来 

  又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏? (acer)、神通 (mitac)、佳佳、零壹 (zero one)、大众 (fic)创立,故称大五码。 

  big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、ibm ps55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的gb2312编码亦未有收录繁体中文字。 

  2.特点 

  big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xa461及0xc94a)、“?亍?0xdcd1及0xddfc)。 

  3.字符编码方法 

  big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xa1-0xf9,低位字节的编码范围0x40-0x7e及0xa1-0xfe。 

  各编码范围对应的字符类型如下:0xa140-0xa3bf为标点符号、希腊字母及特殊符号,另外于0xa259-0xa261,存放了双音节度量衡单位用字:???????憝??;0xa440-0xc67e为常用汉字,先按笔划再按部首排序;0xc940-0xf9d5为次常用汉字,亦是先按笔划再按部首排序。 

  4.big5 的局限性 

  尽管big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假名字母。 

  例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字(如“亠”、“疒”、“?”、“?”等)、常见的人名用字(如“?摇薄ⅰ办印薄ⅰ?唷薄ⅰ?础钡? 也没有收录到big5之中。 

  gb18030 字符集 

  1.名称的由来 

  gb 18030的全称是gb18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准 

  2.特点 

  gb 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。 

  gb 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与unicode 3.0版本兼容,填补unicode扩展字符字汇“统一汉字扩展a”的内容。并且与以前的国家字符编码标准(gb2312,gb13000.1)兼容。 

  3.编码方法 

  gb 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0×00至0×7f码(对应于ascii码的相应码)。双字节部分,首字节码从0×81至0×fe,尾字节码位分别是0×40至0×7e和0×80至0×fe。四字节部分采用gb/t 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×fe39fe39。其中第一、三个字节编码码位均为0×81至0×fe,第二、四个字节编码码位均为0×30至0×39。 

  4.包含的内容 

  双字节部分收录内容主要包括gb13000.1全部cjk汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。  四字节部分收录了上述双字节字符之外的,包括cjk统一汉字扩充a在内的gb 13000.1中的全部字符。 

  unicode字符集 

  1.名称的由来 

  unicode字符集编码是universal multiple-octet coded character set 通用多八位编码字符集的简称,是由一个名为 unicode 学术学会(unicode consortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2005年3月31日的unicode 4.1.0。 

  2.特征 

  unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 

  3.编码方法 

  unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“u+”,例如字母“a”的编码为 004116 和字符“?”的编码为 20ac16。所以“a”的编码书写为“u+0041”。 

  4.utf-8 编码 

  utf-8是unicode的其中一个使用方式。 utf是 unicode translation format,即把unicode转做某种格式的意思。 

  utf-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的unicode能够在现存的处理单字节的系统上正确传输。 

  utf-8使用可变长度字节来储存 unicode字符,例如ascii字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。 

  5.utf-16 和 utf-32 编码 

  utf-32、utf-16 和 utf-8 是 unicode 标准的编码字符集的字符编码方案,utf-16 使用一个或两个未分配的 16 位代码单元的序列对 unicode 代码点进行编码;utf-32 即将每一个 unicode 代码点表示为相同值的 32 位整数。 

  php 各种应用乱码问题的解决方法 

  1) 使用 标签设置页面编码 

  这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 gb2312、gbk、utf-8(和 mysql 不同,mysql 是 utf8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。 

  请注意, 是属于 html 信息的,仅仅是一个声明,仅表明服务器已经把 html 信息传到了浏览器。 

  2) header("content-type:text/html; charset=xxx"); 

  这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 html信息的差别了: 

  http 标头是服务器以 http 协议传送 html 信息到浏览器前所送出的字串。而 标签是属于 html 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。 

  同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的apache 的原因了。 

  3) adddefaultcharset 

  apache 根目录的 conf 文件夹里,有整个 apache 的配置文档 httpd.conf。 

  用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 adddefaultcharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。 

  如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 adddefaultcharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。 

  下面列出以上的优先顺序: 

  header("content-type:text/html; charset=xxx") 

  .. adddefaultcharset xxx 

  .. 

  如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。 

  4) php.ini 中的 default_charset 配置: 

  php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。 

Winston AI
Winston AI

强大的AI内容检测解决方案

下载

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

89

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

276

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

99

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

105

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

230

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

619

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

173

2026.03.04

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

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

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