首页 > 其他分享 >字符编码

字符编码

时间:2022-11-11 11:04:01浏览次数:68  
标签:编码 字符 codepage 字符集 GB2312 GBK Unicode



稍微研究了一下,总结在下:





一、什么是字符集

字符集:GB2312GBKGB18030和万国码(Unicode)等,这都是常见的中文字符集。所谓的字符集,形象一点理解就是某个值与某个中文字的映射,而每个字符集都有自己不同的映射关系。兴趣个最简单的例子,ASCII码。可见,字符集都是人们规定出来的,本身必须通过某些标准发布并且被广泛使用才有意义。



二、常见的字符集

1)ASCII码:American Standard Code for Information Interchange,​美国信息交换标准代码。大家最常使用的编码了,收录128个字符,包括95个可见字符和33个控制字符。总的来说,只能够支持英文。


2)GB2312GB2312或 GB2312-80是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集?基本集》,又称GB0。是第一个版本的简体中文字符集。GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、​​希腊​​字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。但对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBKGB18030汉字字符集的出现。总的来说,是支持字符最少的简体中文字符集。


3)GBKGBK汉字内码扩展规范K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。由于GB2312-80只收录6763个汉字,有不少汉字,并未有收录在内。于是厂商微软利用GB2312-80未使用的编码空间,收录GB13000.1-93全部字符制定了GBK编码。根据微软资料,GBK是对GB2312-80的扩展,也就是CP936字码表 (Code Page 936)的扩展(之前CP936GB2312-80一模一样),最早实现于Windows 95简体中文版。虽然GBK收录GB13000.1-93的全部字符,但编码方式并不相同。原始GB13000一直未被业界采用,后续国家标准GB18030技术上兼容GBK而非GB13000。总的来说,GBK是微软根据GB13000所收录的字符,在GB2312的基础上扩展而来的,但其编码方式和GB13000不一样,而后续的国家标准GB18030事实上兼容GBK而不是GB13000,所以GB13000只是一个未被业界使用的字符集,而GBK才真正成为了标准。


4)GB18030:全称:国家标准GB18030-2005《信息技术 中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000Unicode的全部统一汉字,共收录汉字70244个。总的来说,现时最新的中国内码字符集,与GB2312GBK等都兼容,并且支持Unicode的全部统一汉字。


5)Unicode:(统一码万国码单一码标准万国码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简化地方式来呈现和处理文字。Unicode依随着通用字符集(Universal Character Set,UCS)的标准而发展,同时也以书本的形式对外发表。总的来说,Unicode的目标是为世界上的每一个字符建立一套统一的编码体系,这其中当然包括对中文字符的支持。

现在用的是UCS-2,即2个字节编码,而UCS-4是为了防止将来2个字节不够用才开发的。UCS-2也称为基本多文种平面。
UCS-2转换到UCS-4只是简单的在前面加2个字节0。
UCS-4则主要用于保存辅助平面,例如Unicode 4.0中的第二辅助平面
  20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF -   26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF 
  总共增加了16个辅助平面,由原先的65536个编码扩展至将近100万编码。

  那么既然统一了编码,如何兼容原先各国的文字编码呢?
  这个时候就需要codepage了。
  什么是codepage?codepage就是各国的文字编码和Unicode之间的映射表。
  比如简体中文和Unicode的映射表就是​​​CP936​​​,点​​这里查看​​​官方的映射表。

以下是几个常用的codepage,相应的修改上面的地址的数字即可。
codepage=936 简体中文GBK
codepage=950 繁体中文BIG5
codepage=437 美国/加拿大英语
codepage=932 日文
codepage=949 韩文
codepage=866 俄文
codepage=65001 unicode UFT-8 




三、Unicode的编码方式和实现方式

大概来说,Unicode编码系统可分为编码方式实现方式两个层次。

编码方式:

10646的通用字符集概念相对应。目前实际应用的统一码版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示2的16次方(即65536)个字符。基本满足各种语言的使用。实际上当前版本的统一码并未完全使用这16位编码,而是保留了大量空间以作为特殊使用或将来扩展。

实现方式:

Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(UnicodeTransformation Format,简称为UTF)。常见的实现方式有UTF-8、UTF-16等。

所以,总的来说,我们常用到的UTF与Unicode的关系是,UTF是Unicode编码方式的实现方式。Unicode字符集本身只是一个编码与字符的对应关系表而已,而出于节省空间等的目的,有了UTF-8等实现方式。而具体的实现方式,不是本文的主要目的,在这里就不赘述了。






​​#utf-8unicode​​



标签:编码,字符,codepage,字符集,GB2312,GBK,Unicode
From: https://blog.51cto.com/u_2776699/5843257

相关文章

  • 1704. 判断字符串的两半是否相似
    1704.判断字符串的两半是否相似给你一个偶数长度的字符串s。将其拆分成长度相同的两半,前一半为a,后一半为b。两个字符串相似的前提是它们都含有相同数目的元音('a......
  • C++标准库<locale> :由islower() 函数 ----- 判断字符是否为小写字母 深入学习locale库
      C++标准库<locale>:声明:classlocale;接口:   ......
  • 字符串之字符串的拼接
    1stringteacher="teach_";2stringname="ab";3teacher+=name[0];4cout<<teacher<<endl;打印结果: ......
  • 查找字符串数组中的最长公共前缀
     import java.util.*;public class Solution {    /**     *      * @param strs string字符串一维数组      * @return string......
  • 最小装载(二分法)字符串
    1011.在D天内送达包裹的能力左值为数组中最大的元素(最少要能把它装下);右值为数组元素之和;while(left<right){intmid=(right+left)/2;intneed=1,cur=......
  • Spring整合Mybatis分析与编码
    Spring整合Mybatis分析与编码正文Mybatis在开发的过程中,必须要经过的步骤有数据表-实体类-实体类别名-mapper接口-mapper文件实现-mapper文件注册-mybatisAPI......
  • Java 比较字符串之间大小
    LZ-Says:心态调整好~啥事儿都得开开心心的~前言公司让实现一个自动清除1小时内数据,SQL不熟悉,无奈之下,只能本地DB存储当前时间+小时去和当前时间进行比对。折腾好半天,突然想到......
  • 基本数据类型与字符串类型的转换
    本文主要内容是阐明字符串与基本数据类型之间的转换字符串是引用数据类型下面介绍一下java中的数据类型:  重点:①基本数据类型--->String:语法:将基本数据类型的值+......
  • C++软件编码规范推荐--文件结构
    1文件结构每个C/C++程序通常分为两个文件,头文件(保存程序的声明)和定义文件(保持程序的实现)。头文件以“.h”为后缀;C程序的定义文件以“.c”为后缀,C++程序的定义文......
  • 2022-11-10 js 删除字符串某个值
    共4种方案:letstr='123';1、replace('1','一');//结果:一23 解释:把指定字符串替换成你想要的字符串,如果替换值为空字符串,则可以实现删除效果符串;不会改变原始字符串......