首页 » PHP教程 » php区位码技巧_彻底搞懂困扰轨范员多年的GBK 和 UTF8

php区位码技巧_彻底搞懂困扰轨范员多年的GBK 和 UTF8

duote123 2024-11-05 0

扫一扫用手机浏览

文章目录 [+]

实在当你理解了这两个编码办法后,你就会知道GBK是中国标准,UTF8是网络传输标准,Unicode是环球标准。

我们首先先容下GBK:(GBK的发展史)

php区位码技巧_彻底搞懂困扰轨范员多年的GBK 和 UTF8

那么我们不得不提的是区位码:

php区位码技巧_彻底搞懂困扰轨范员多年的GBK 和 UTF8
(图片来自网络侵删)

个中前两位为“区”,后两位为“位”,中文汉字的编号区号是从16开始的,位号从1开始。
前面的区号有一些符号、数字、字母、注音符号(台)、制表符、日文等等。
大略来说便是0~1599表示的是除汉字之外的字符编号。
1600~9999个中部分代表汉字编号,当然当时的汉字数量该当没有占用完所有的编号。

接下来发展到GB2312:

是基于区位码的,用双字节编码表示中文和中文符号。
一样平常编码办法是:0xA0+区号,0xA0+位号。
如下表中的 “安”,区位号是1618(十进制),那么“安”字的GB2312编码便是 0xA0+16 0xA0+18 也便是 0xB0 0xB2 。
根据区位码表,GB2312的汉字编码范围是0xB0A1~0xF7FE

以ASCII编码,也便是说当代的GBK编码是兼容ASCII编码的。
比如一个数字2,对应的二进制是0x32,而不是 0xA3 0xB2。
那么问题来了,0xA3 0xB2 又对应到什么呢?还是2。
把稳看了,这里的2跟2是不是有点不太一样?!
确实是不一样的。
这里的双字节2是全角的二,ASCII的2是半角的二,一样平常输入法里的切换全角半角便是这里不同。

那么实在GBK便是对GB2312的补充,当然往后GB18030是对GBK的补充

同一个编码文件里,怎么区分ASCII和中文编码呢?从ASCII表我们知道标准ASCII只有128个字符,0~127即0x00~0x7F(0111 1111)。
以是区分的方法便是,高字节的最高位为0则为ASCII,为1则为中文。

现在我们国家的GBK先容完了,看下来是不是有点豁然开朗的觉得!
实在便是一种逐一对应汉字的编号办法,嘿嘿!

那么我们接下来看看环球是怎么编码的呢?实在也是类似,只是这是不但有汉字,有全天下各个国家的字符了。

现行的Unicode编码标准里,绝大多数程序措辞只支持双字节,以是Unicode也便是双字节的标准表示环球所有的字符(可以包括65536中字符),

为英笔墨符也全部利用双字节,存储本钱和流量会大大地增加,以是Unicode编码大多数情形并没有被原始地利用,而是被转换编码成UTF8,这才涌现了UTF8.

而Unicode与UTF8之间的转换是通过下面这个表格进行的:

现在还有末了一个问题便是BOM,作甚BOM?

所谓BOM头(Byte Order Mark)便是文本文件中开始的几个并不表示任何字符的字节,用二进制编辑器(如bz.exe)就能看到了。

UTF8的BOM头为 0xEF 0xBB 0xBF

Unicode大端模式为 0xFE 0xFF

Unicode小端模式为 0xFF 0xFE

如何区分一个文本是无BOM的UTF8还是GBK?

答案是,只能按大量的编码剖析来区分。
目前识别准确率很高的有:Notepad++等一些常用的IDE,PHP的mb_系列函数,python的chardet库及其它措辞衍生版如jchardet,jschardet等

标签:

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0