GB2312、GBK、BIG5、Unicode及字符编码基础知识

在搜狗的设置里面有个选项,要用户选择使用GBK还是GB2312,论坛里面常常有人要求输入法支持BIG5编码,也有人提到

Unicode编码,那么这些东东都是什么意思呢?我查找资料不求甚解的了解了一下,把我的初步理解和大家分享一下吧:

-------------
ASCII字符编码
-------------
众所周知,计算机只能处理二进制数码,如何处理中英文以及其他形形色色的字符呢?这就需要用到字符编码。

最早的字符编码先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits),因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他一些符号。

而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其他符号。但是扩展ASCII码没有真正的标准化,于是各个国家纷纷利用扩展ASCII制定了自己的文字编码规范,对于汉字来说,一个中文字符可以用两个扩展ASCII字符来表示。

-----------------
GB2312和Big5编码
-----------------
由于历史原因,当时利用扩展ASCII的汉字编码规范有三个:
GB2312-80,是中国大陆使用的国家标准,一共收录了7445个字符,包括6763个常用简体汉字和682个其它符号。
Big5,是中国台湾使用的编码标准,编码了台湾使用的繁体汉字,大概有8千多个。
HKSCS,是中国香港使用的编码标准,字体也是繁体,但跟Big5有所不同。

这3套编码标准都采用了两个扩展ASCII字节的方法,因此,几套编码互不兼容,而且编码区间也各有不同。因为其不兼容性,在同一个系统中同时显示GB和Big5基本上是不可能的,所以当时经常看到由于编码不符造成的乱码。当时的南极星、RichWin等等软件,在自动识别中文编码、自动显示正确编码方面都做了很多努力。

后来,国际上又制定了针对中文的统一字符集GBK和GB18030。
1995年的汉字扩展规范GBK1.0收录了21886个符号,其中包括21003个字符汉字。GBK兼容GB2312,并增加了大量不常用汉字,还加入了几乎所有的Big5中的繁体汉字。但是GBK中的繁体汉字和Big5中的几乎不兼容。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。GB18030相当于是GBK的超集,比GBK包含的字符更多。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。

----------------
Unicode字符编码
----------------
这时候,我们就知道,要真正解决中文问题,不能从扩展ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将中文、英文、法文、德文、日文、韩语、越南字喃……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样才不会有上面那种互不兼容的现象出现。

于是,Unicode诞生了。Unicode是由国际组织(国际标准化组织ISO和Unicode协会)设计的一种字符编码方法,可以容纳全世界所有语言文字的编码方案。Unicode的学名"Universal Multiple-Octet Coded Character Set",简称为UCS。

在Unicode里,所有的字符被一视同仁。汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了。Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字),目前Unicode标准准备把康熙字典的所有汉字放入到Unicode 32bit编码中。从理论上来说,Unicode能够表示世界上所有的书写语言中可能用于电脑通讯的字元、象形文字和其他符号。到了现在,Unicode标准已经不单是一个编码标准,还是记录人类语言文字资料的一个巨大的数据库,同时从事人类文化遗产的发掘和保护工作。

Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码、BIG5码都不兼容。

----------------
非 Unicode 环境
----------------
在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为繁体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道。

支持Unicode必然是大势所趋,但要首先解决的是操作系统的字符集和字库的问题。就拼音输入法来说其实不是太麻烦,首先编码上很容易,仅仅是多些字、多些读音。而那些生僻字构词又极少,对词库的干扰自然很小。加上那些日韩汉字基本是用不上的,可以不作考虑。所以在输入法开发方来说工作量有限。

Unicode还在发展,目前用内码、区位码的方式可以输入不少Unicode3.1里的汉字(是不是全部我不知道,我想至少含多奇怪的日韩汉字是不支持的吧。),而常用输入法的编码似乎没有跟上。像海峰五笔用86版是仅有的支持国际超大字集的流行输入方式。拼音输入法基本上还停留在GBK上。而即便可以用海峰打出很多生僻字来,但在多数缺少专门字库支持的电脑上是无法正常显示的。所以,关键还是操作系统自身对Unicode的支持。

GB2312、GBK、BIG5、Unicode及字符编码基础知识相关推荐

  1. 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8

    字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...

  2. GB2312和BIG5,Unicode/UTF8等编码之间的互相转化

    在工作中经常会用到GB2312和BIG5,Unicode/UTF8等编码之间的互相转化,也有很多程序员对这个问题不断的提问,现在我把我的 实现告诉大家. #include "Utf8.h&q ...

  3. 计算机字符编码基础知识

    计算机字符编码基础知识 由于计算机只能识别0和1,所以字符(文字.符号)需要编码,图像.音频.视频等也需要编码.本文主要介绍字符编码,特别是与机内码相关的内容. 字符的处理涉及到下列三类编码: 输入码 ...

  4. 常用字符集(ASCII,ISO8859-1,GB2312,GBK,Unicode)和字符编码(UTF-8,UTF-16)

    转自:https://blog.csdn.net/wn084/article/details/80363792 参考:https://blog.csdn.net/halchan/article/det ...

  5. 编码全解:从ASCII/ISO-8859/GB2312/GBK到Unicode的UCS-2/UCS-4/UTF-8/UTF-16/UTF-32

    1.ASCII编码 为了能在电报.打印机.计算机等电信设备上进行信息交换,就必须为不同的设备制定统一的编码格式.早期的电信设备字符编码基本都是使用6位编码.1963年美国国家标准协会(ANSI)制定并 ...

  6. 编码gbk的不可映射字符_Python基础:编码表和字符的故事

    在计算机内部,都是每8位组成的一个个字节,比如我们使用"abc".encode()把abc转化成二进制byte类型,注意byte是不可变类型: 编码过程 >>> ...

  7. python3 gb2312转utf8_python2和python3字符编码 unicode,utf-8,gb2312相互转换encode,decode...

    一.预习: 1.Unicode 和utf-8之间的关系 unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk -- UTF-8是Unicode的实现方式之一 2.pyth ...

  8. 各种编码格式(GB2312,GBK,GB18030,unicode,utf-8)之间的关系

    汉字常用编码格式 为了在屏幕上显示字符.需要下面几个步骤: 制作所有字符对应的字模.比如大写字母A长什么样.这个模样就是最终显示在屏幕上图形,即我们看到的字符A. 为对所有的字符进行编码.比如大写字母 ...

  9. VC中三种常见中文内码的转换方法(GB2312/GBK/BIG5)

    我们平时常见的三种中文内码是:GB2312(简体中文).GBK.BIG5(繁体中文).网上有很多中文内码的专用转换工具.我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换.但论坛里经常 ...

最新文章

  1. 一个资深投行女销售和低调IT创业男的故事
  2. 记录mysql中的隐患特性
  3. 如何利用DeepFM算法设计推荐系统
  4. 基于ArcEngine实现分组统计面积的功能
  5. Spring 框架基础(01):核心组件总结,基础环境搭建
  6. 各种服务器系统桌面,服务器系统云桌面
  7. 源码包nginx 配置php,源码安装Nginx和PHP
  8. java 8进制 前是 零,从零学java笔录-第6篇 进制之间转换
  9. 汉诺塔的图解递归算法
  10. latex关于的报错问题及表格排版问题
  11. 《华为工作法》8 自我提升的华为人
  12. 在已有win7系统的基础上重装win10系统
  13. 向军php视频教程下载,向军hd框架视频教程,后盾网框架下载
  14. 奥西450的服务器系统,奥西TDS450驱动
  15. 哈希表,设计哈希集合,
  16. 【吐槽】B站大量番剧下架,程序猿们这时都在干什么?
  17. 链表实现学生信息管理系统
  18. 数学基础知识积累——傅里叶分析
  19. Java9中2个被废弃的使用方法
  20. 使用 SSM 框架实现发送手机短信验证码

热门文章

  1. java计算机毕业设计中小型企业资金流管理系统源程序+mysql+系统+lw文档+远程调试
  2. 【idea系列】idea中的pom.xml不是蓝色
  3. com.upd.sso.client.SsoFilter.init(SsoFilter.java..)无法访问swagger-ui.html
  4. 小学生蓝桥杯Python闯关 | 汇总
  5. 写在2019年末的一些话
  6. mysql数据库replace写入_mysql 操作总结 INSERT和REPLACE
  7. Archlinux安装屏保墙纸软件(livewallpaper)
  8. 使用 ThreeJs 制作的任意阶级魔方游戏
  9. 计算机共享后不能互相访问吗,怎么设置局域网共享(局域网间电脑不能互访)...
  10. html表单位怎么设置,单位设置.html