字符集的GB18030
GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。
GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 30版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB130001)兼容。 UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Tranformation Format,即把Unicode转做某种格式的意思。
UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。
UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。 UTF-16 和 UTF-32 编码
UTF-32、UTF-16和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案,UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。
GB2312是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB2312字符集(characterset)只收录简化字汉字,以及一般常用字母和符号,主要通行于中国大陆地区和新加坡等地。GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
GB2312将所收录的字符分为94个区,编号为01区至94区;每个区收录94个字符,编号为01位至94位。GB2312的每一个字符都由与其唯一对应的区号和位号所确定。
GB2312编码的范围:高字节范围是0XA1-0XFF,低字节范围是0XA1-0XFF。GB2312原始编码(encoding)是对所收录的每个字符都用两个字节(byte)表示。第一字节为“高字节”,由字符的区号值加上32而形成;第二字节为“低字节”,由字符的位号值加上32而形成。在区位号值上加32的原因大慨是为了避开低值字节区间。由于GB2312原始编码与ASCII编码的字节有重叠,现在通行的GB2312编码是在原始编码的两个字节上各加128修改而形成,如果不另加说明,GB2312常指这种修改过的编码。例如:汉字“啊”,编号为16区01位。
日文中字乱码一二三区别在哪里
日文中的字乱码一、二、三指的是不同的字体编码系统,其中一区使用的是JIS编码,二区使用的是EUC编码,三区使用的是Shift_JIS编码。
1不同编码系统的起源和特点:
一区(JIS编码):JIS(日本产业规格)编码是在日本制定的一套字符编码标准,包括汉字、假名、拉丁字母等,用于表示日文字符。它是最早采用的日文字符编码系统之一。
二区(EUC编码):EUC(扩展UNIX编码)是一种多字节字符编码系统,用于表示日文、韩文、中文等多种语言字符。它提供了更高的字符容纳能力,并且可以在不同国家的计算机系统之间进行互操作。
三区(ShiftJIS编码):ShiftJIS是日本微软开发的一种字符编码系统,用于表示日文字符。它在一区和二区的基础上进行了扩展,包括更多的汉字和特殊字符。
2乱码的原因和解决方法:
乱码一二三的区别在于使用的字符编码系统不同,如果在不同编码系统之间进行转换或者在不支持相应编码的系统上打开,就会出现乱码现象。
解决乱码问题的方法包括:使用正确的编码系统打开文档、在软件中更改编码设置、使用专门的乱码处理工具等。
拓展知识:
1、日本的字符编码发展
日本的字符编码系统经历了多个阶段的发展和演变,从早期的JIS编码到后来的Unicode标准,这些变化影响了日本语言处理、计算机软硬件的设计和国际化交流。
2、Unicode的出现和作用
Unicode是一种全球通用的字符编码标准,旨在统一世界上各种语言和符号的表示方式。它提供了包括日文在内的数十万个字符的编码,解决了跨语言编码转换和显示的问题。
3、乱码对于日本用户的影响
在日本,乱码问题可能导致文字无法正常显示或传达,给使用者造成阅读困难、信息传递错误等问题,因此正确处理和处理乱码至关重要。
4、跨国字符编码的挑战和解决方案
在跨国环境中,不同语言和字符编码的差异给信息交流和软件开发带来了挑战。采用统一的字符编码标准(如Unicode)、提供多语言支持和乱码处理工具,可以帮助解决这些问题。
做一个试验。
新建一个文本文件,然后用记事本打开,输入“联通”,保存,关闭。
再次用记事本打开这个文本文件,你看到了什么?
这被人戏称是联通干不过移动的根本原因——连自己的名字都存不下来。
下面对字符的编码进行一下总结,会在其中说明联通消失的原因。
ASCII = American Standard Code for Information Interchange, “美国信息交换标准码”
ASCII码规定每个字符例使用1个字节来表示,也就是8位的二进制组合,那么就有00000000-11111111一共256种组合,也就是可以表示256个不同的字符。
但是实际上ASCII共计有128个,从0到127,也就是从00000000-01111111,最高位都是0。
目的:解决汉字等英文字母以外字符的显示问题。
基本方法:使用最高位是1的字符(防止与ASCII冲突),2个字节表示一个汉字。
编码转换方法举例:
这些使用 2 个字节来代表一个字符的各种文字延伸编码方式,称为 ANSI 编码。
注意ANSI编码指是“本地化”编码,在各个国家对应的编码体系是不同的。
在中文环境下以ANSI编码存储的文件,在日文环境下打开是乱码。因为一个是GB2312编码,一个是JIS编码。
(顺便吐槽,有个国标组织是很幸福的事情,日本通用的编码方式至少有四套,特么的两个公司做的系统之间通信,弄的跟国际化似的还要转换编码,比如:神奇的みずほ银行)
为了使国际间信息交流更加方便,国际组织制定了unicode字符集。
为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。
unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符。
unicode编码中,不管什么文字统一使用4字节表示一个文字。
unicode中,每个字符用 4 个字节在存储、传输时会产生浪费。
UTF-8、UTF-16、UTF-32都是unicode的“紧凑”编码。都是 可变长度 编码。(所以想一下java中计算字符串长度时,碰到汉字的时候得到的到底是什么的长度?)
UTF = Unicode Transformation Format。
其中UTF-32使用32位整数编码,还是占4个字节(32bit),所以基本上不会使用。
UTF-8或UTF-16,分别由 8-bit 或 16-bit 为一个单元组成,下标值较小的编码点占用的字节数也少。
utf-8 使用 1~4 个不等的字节来存储字符编码。
以“郑”字为例,说明从unicode到utf-8的转换。
UTF-8 有一个方便的属性,即最开始128 个字符(ASCII字符)被编码为单个字节。
使用 NotePad++ 这样的文本编辑器时,可以将文件“以 UTF-8 无 BOM 格式编码”。
所谓的BOM,全称是Byte order mark。
作用是在文件最开始加入一个标识符,让文本编辑器明确知道读入的文件是以何种方式编码的。
常用的BOM如下:
记事本默认的编码是 ANSI,对于中文系统中就是 GBK 编码。
“联”字的编码是 0xc1aa,二进制 110 0 0001 10 10 1010。
“通”字的编码是 0xcda8,二进制 110 0 1101 10 10 1000
→ 这玩意跟编码规则中第二行是相符的。
所以记事本再次打开这个文件的时候,将其识别成了“UTF-8 无 BOM 格式”,所以全程按照utf-8编码规则解析,就变成了乱码。
人家移动俩字就没这事。电信啥的也都没事。
结论:当文档中的所有字符的二进制编码在C0≤AA(第一个字节)≤DF 80≤BB(第二个字节)≤BF时,记事本都无法确认文本的编码格式,就按照UTF-8的格式来显示。
在第一章提到的第三个阶段(国际化)的初期,其实有两套国际化编码。
UCS-2 是 ISO 10646标准为“通用字符集”(UCS)定义的16位 固定长度 编码。
它包含65536个编码空间,存储的是全世界最常用的65536个字符编码。
可以认为 UCS-2 是 UTF-16 的一个子集,编码相同。其实UCS-2就是原始的双字节Unicode编码。
UCS-2 这种两字节定长编码,在存储的时候,有两种格式。
参看 Notepad++ 的编码菜单,里面有“以 UCS-2 Little endian 格式编码”以及“以 UCS-2 Big endian 格式编码”
比如“郑”的编码是 90D1 (没错,对于这个字的编码,unicode、ucs-2和utf-16是相同的)
如果存储为 90D1,叫做BE(Big endian);倒过来存为 D190 的话,称为LE(Little endian)。
习惯windows系统的人可能根本没见过LE,但是在Unix/Linux中这种情况并不少见。
在 UCS-2/unicode(兼容) 编码标准中,规定在每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(zero width no-break space)。
→ 等等,文件头上的信息不是BOM吗?
完整的BOM编码
也就是说,表达编码种类以及BE、LE的工作都是由BOM来完成的
其实Linux默认UTF-8编码应该不带BOM的。
尽管 Unicode 标准允许在 UTF-8 中使用 BOM,但不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯。
因为把带有BOM的小端(LE)的 UTF-16 称作「Unicode」也是微软的习惯
猜(参看联通事件)
mysql支持的 utf8 编码最大字符长度为3字节,而标准的utf-8最大字符长度为4字节。
三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中所谓的“基本多文种平面(BMP)”。能够应对绝大多数应用场景。
(MySQL刚开发的时候,unicode本身也没有提出“辅助平面”,所以3字节的设计是无可厚非的)
但是包括 Emoji 表情、一些特殊汉字在内的字符是无法存储的。
MySQL 553 版本以后,推出utf8mb4字符集,用来对应标准的utf-8。
可以参看这篇文章中的“Unicode 介绍”一节
Unicode 及编码方式概述
简单来说,就是把所有字符统一转换成可见字符。
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。
(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
由于 2的6次幂=64,所以Base64编码中,以6个比特为一个单元,对应某个可打印字符。
比如,3个字节一共24比特,那么就对应4个Base64单元。
也就是说,编码后的数据长度为原来的 4/3。
若原数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=。
举例:
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。
UTF-7是一个修改版Base64(Modified Base64)。
主要是将UTF-16的数据,用Base64的方法编码为可打印的ASCII字符序列。目的是传输Unicode数据。
主要的区别在于不用等号=补余,因为该字符通常需要大量的转译。
URL编码(URL encoding),也称作百分号编码(Percent-encoding)。
适用于统一资源标识符(URI)的编码,也用于为"application/x-www-form-urlencoded" MIME准备数据。
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
举例1:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在最新标准(RFC-1738)中空格对应的是+。
举例2:
“中”的GB2312码是0xD6D0,那么urlencode编码结果是:%D6%D0
在ASCII码表中,按照ASCII码值从小到大的排列顺序是数字、英文小写字母、英文大写字母;
ASCII基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
扩展资料:
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 。其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响
列中ASCII码值最小的是A,为65。而a为97,Z为90,X为88。
26个字母ASCII码大致的大小顺序为从A-Z,a-z从小到大排列。
扩展资料产生原因
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如、#、@等)。
在计算机中存储时也要使用二进制数来表示而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱;
那么就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
美国标准信息交换代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。
它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。
汉字编码
目前的文字编码标准主要有 ASCII、GB2312、GBK、Unicode等。ASCII 编码是最简单的西文编码方案。GB2312、GBK、GB18030 是汉字字符编码方案的国家标准。
ISO/IEC 10646 和 Unicode 都是全球字符编码的国际标准。下面对与汉字相关的编码方案GB2312,GBK与GB18030做简要的分析。
-ASCII
ascii码对照二十六个字母如下:
A-65,B-66,C-67,D-68,E69F-+70,G+71,H-72,I-73,J-74K-+75,L-+76,M-77,N-78,0-79,p-80,Q-81,R-82,S-83,T-84,U-85,V-86,W-87,X-88,Y-89,Z-90。
ASCII介绍:
American Standard Code for Information Interchange是美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
它是最通用的信息交换标准,并等同于国际标准ISO/IEC646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
产生原因:
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如、#、@等)在计算机中存储时也要使用二进制数来表示;
而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
美国信息交换标准代码是由美国国家标准学会(American National Standard Institute,ANSI)制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。
它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization,ISO)定为国际标准,称为ISO646标准。适用于所有拉丁文字字母。
char的范围是-128到127。
一、什么是char类型?
char是C语言中的一种基本数据类型,用于表示字符。它占用一个字节(8位),可以存储ASCII码对应的字符。
二、char类型的取值范围
char类型可以取-128到127之间的整数值,包括负数和正数。这个范围是由char类型的编码方式决定的,常见的编码方式有ASCII码和Unicode码。
1、ASCII码:
ASCII码是一种字符编码标准,使用7位表示128个字符,包括字母、数字、标点符号等常用字符。其中,0到31是控制字符,32到126是可显示字符,127是删除字符。
根据ASCII码,-128到-1之间的整数值对应的字符是无法显示的控制字符,而0到127之间的整数值对应的字符是可显示的字符。
2、扩展ASCII码:
扩展ASCII码使用了8位,可以表示更多的字符。在扩展ASCII码中,-128到-1之间的整数值对应的字符仍然是无法显示的控制字符,而0到127之间的整数值对应的字符与ASCII码相同。
3、Unicode码:
Unicode码是一个国际标准,用于表示世界上所有的字符,它可以使用不同的编码方式来存储字符。其中,最常用的编码方式是UTF-8和UTF-16。在UTF-8编码中,char类型可以表示0到127之间的整数值对应的字符,而-128到-1之间的整数值对应的字符需要使用多个字节来表示。
三、char类型的应用场景
1、字符串处理:char类型可以表示单个字符,通过char数组可以表示字符串。在C语言中,字符串以null结尾,即以'\0'字符表示字符串的结束。
2、文件操作:在文件读写过程中,通常使用char类型来表示读取或写入的字节。
3、编码转换:由于不同的编码方式使用不同的字符集,char类型可以用于字符编码的转换和处理。
4、控制台输入输出:char类型可以用于控制台输入输出,例如获取用户输入的字符或显示字符到控制台。
char类型是C语言中用于表示字符的数据类型,其取值范围为-128到127。根据不同的编码方式,char类型可以表示控制字符、可显示字符和扩展字符。在实际应用中,char类型广泛应用于字符串处理、文件操作、编码转换和控制台输入输出等方面。
字符集的GB18030
本文2023-10-06 14:51:05发表“古籍资讯”栏目。
本文链接:https://www.yizhai.net/article/104098.html