精华内容
下载资源
问答
  • 常用的字符编码包括
    千次阅读
    2019-03-12 11:15:50

    无论在是在编辑文本文件的时候,还是在制作网页的时候,总会遇到文本编码方式的问题。如果处理不当,就会出现乱码的问题。因此,有必要对文本的编码方式做一个详尽的了解。

    常见的一些字符编码方式无非有:Unicode、ASCII、GBK、GB2312、UTF-8。下面先对常见的这一些字符编码方式作下说明:

    1.ASCII码

    这是美国在19世纪60年代的时候为了建立英文字符和二进制的关系时制定的编码规范,它能表示128个字符,其中包括英文字符、阿拉伯数字、西文字符以及32个控制字符。它用一个字节来表示具体的字符,但它只用后7位来表示字符(2^7=128),最前面的一位统一规定为0。

    2.扩展的ASCII码

    原本的ASCII码对于英文语言的国家是够用了,但是欧洲国家的一些语言会有拼音,这时7个字节就不够用了。因此一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。但这时问题也出现了:不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。这个问题就直接促使了Unicode编码的产生。

    3.Unicode符号集

    正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。而Unicode就是这样一种编码:它包含了世界上所有的符号,并且每一个符号都是独一无二的。比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表 。很多人都说Unicode编码,但其实Unicode是一个符号集(世界上所有符号的符号集),而不是一种新的编码方式。

    但是正因为Unicode包含了所有的字符,而有些国家的字符用一个字节便可以表示,而有些国家的字符要用多个字节才能表示出来。即产生了两个问题:第一,如果有两个字节的数据,那计算机怎么知道这两个字节是表示一个汉字呢?还是表示两个英文字母呢?第二,因为不同字符需要的存储长度不一样,那么如果Unicode规定用2个字节存储字符,那么英文字符存储时前面1个字节都是0,这就大大浪费了存储空间。

    上面两个问题造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。

    4.UTF-8

    互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    UTF-8的编码规则很简单,只有两条:

    1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

    2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

    .GBK/GB2312/GB18030

    GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字的编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。

    总的来说:

    ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。

    拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符

    GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。

    Unicode编码:包含世界上所有的字符,是一个字符集。

    UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。

    更多相关内容
  • 计算机常用字符编码

    千次阅读 2021-06-29 14:32:50
    是基于罗马字母表的一套电脑编码系统,它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。 国标准信息交换码的英文简称,是计算机中用二进制表示字母、数字、符号...

    1、ASCII。

    ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)
    是基于罗马字母表的一套电脑编码系统,它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646

    国标准信息交换码的英文简称,是计算机中用二进制表示字母、数字、符号的一种编码标准。ASCII码有两种,使用7位二进制数的称为基本ASCII码;使用8位二进制数的称为扩展ASCII码。

    注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。

    奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

    2、GB2312。

    GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施,是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

    3、GBK。

    GBK字符集是GB2312的扩展(K),GBK1.0收录了21886个符号,它分为汉字区和图形符号区,汉字区包括21003个字符。GBK字符集主要扩展了繁体中文字的支持。

    4、BIG5。

    BIG5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;

    另一方面,台湾当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。

    Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。

    5、GB18030。

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

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

    GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集(DBCS)。

    6.ANSI编码

    不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

    7.Unicode

    1.名称的由来 Unicode字符集编码是(Universal Multiple-Octet Coded Character
    Set
    ) 通用多八位编码字符集的简称,支持世界上超过650种语言的国际字符集。Unicode允许在同一服务器上混合使用不同语言组的不同语言。它是由一个名为Unicode 学术学会(UnicodeConsortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。
    2. 该编码于1990年开始研发,1994年正式公布,最新版本是2005年3月31日的Unicode 4.1.0。Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
    3.编码方法 Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为 004116
    。所以“A”的编码书写为“U+0041”。

    At the same time ,记住UCS(就是unicode)
    

    9.UTF-8 编码

    UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。
    UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。 UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

    10. UTF-16 和 UTF-32 编码

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

    11. 加密的base64编码

    按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

    展开全文
  • 常用字符集及字符编码和Charset类

    千次阅读 2020-07-29 21:23:11
    计算机中储存的信息都是用...由多个字符的集合,字符集种类较多,每个字符包含字符个数不同,字符和二进制数字的对应规则不同。常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GBK字符集、Unicode字符...

    计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。

    • 字符(Character) :是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
    • 字符集(Character Set/Charset):是一个系统支持的所有抽象字符的集合。由多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,字符和二进制数字的对应规则不同。        常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GBK字符集、Unicode字符集等。        
    • 字符编码(Character Encoding):是一套法则,把字符集中的字符编码为特定的二进制数,以便在计算机中存储。每个字符集中的字符都对应一个唯一的二进制编码。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

    字符集和字符编码一般都是成对出现的,如ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码。Unicode比较特殊,有多种字符编码(UTF-8,UTF-16等)。 

    一、常用字符集和字符编码

    1、ASCII字符集&编码

    ASCII(American Standard Code for Information Interchange, 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。

    字符集范围

    ASCII一共定义了128个字符,包括33个控制字符和95个可显示字符。大部分的控制字符已经被废弃。

    编码格式

    ASCII码为单字节,使用7 位二进制数(剩下的1位二进制为0),由于计算机1个字节是8位二进制数,所以最高位为0,即00000000-01111111或0x00-0x7F。

        

       Unicode,GBXXX,UTF-8等字符编码都兼容ASCII编码。

    2、GB2312字符集&编码

    GB 2312 或 GB 2312–80 是中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB 2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

    字符集范围

    GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁体字,GB 2312不能处理,因此后来GBK及GB 18030汉字字符集相继出现以解决这些问题。

    分区

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

    • 01–09区为特殊符号。
    • 16–55区为一级汉字,按拼音排序。
    • 56–87区为二级汉字,按部首/笔画排序。

    举例来说,“啊”字是GB 2312之中的第一个汉字,它的区位码就是1601。10–15区及88–94区则未有编码。

    编码格式

    在使用GB 2312的程序通常采用EUC储存方法,以便兼容于ASCII。
    每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。
    “高位字节”使用了0xA1–0xF7(把01–87区的区号加上0xA0),“低位字节”使用了0xA1–0xFE(把01–94加上0xA0)。 由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0–0xF7,“低位字节”的范围是0xA1–0xFE,占用的码位是72*94=6768。其中有5个空位是D7FA–D7FE。

    3、GBK字符集&编码

    汉字内码扩展规范,称GBK,全名为《汉字内码扩展规范(GBK)》1.0版,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司和电子工业部科技与质量监督司1995年12月15日联合以《技术标函[1995]229号》文件的形式公布。GBK的K为汉语拼音Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Extension Specification。

    字符集

    GB 2312-80只收录6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。GBK对GB 2312-80进行扩展, 总计拥有 23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。

    编码格式

    GBK 亦采用双字节表示,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 xx7F一条线。

        

    GBK向下完全兼容GB2312-80编码。支持GB2312-80编码不支持的部分中文姓,中文繁体,日文假名,还包括希腊字母以及俄语字母等字母。不过这种编码不支持韩国字,也是其在实际使用中与unicode编码相比欠缺的部分。

    4、GB 18030字符集&编码

    GB 18030,全称:国家标准GB 18030-2005《信息技术 中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB 18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。与GB 2312-1980完全兼容,与GBK基本兼容;支持GB 13000(93版等同于Unicode 1.1;2010版等同于Unicode 4.0)及Unicode的全部统一汉字,共收录汉字70,244个。

    本规格的初版是由中华人民共和国信息产业部电子工业标准化研究所起草,由国家质量技术监督局于2000年3月17日发布。现行版本为国家质量监督检验总局和中国国家标准化管理委员会于2005年11月8日发布,2006年5月1日实施。

    此标准内的单字节编码部分、双字节编码部分,和四字节编码部分收录的中日韩统一表意文字扩展A区汉字,为强制性标准。其他部分则属于规模性标准。在中华人民共和国境内所有软件产品,都需要支持这个同时包含单字节、双字节和四字节编码的规格。

    GB 18030主要有以下特点:

    • 和UTF-8一样都采用多字节编码,每个字可以由1个、2个或4个字节组成。
    • 编码空间庞大,最多可定义161万个字元。
    • 支持中国国内少数民族的文字,不需要动用造字区。
    • 汉字收录范围包含繁体汉字以及日韩汉字。

    编码方式

    • 单字节,其值从0x00到0x7F。
    • 双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F)。
    • 四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。

    5、Unicode字符集&编码

    Unicode(中文:万国码国际码统一码单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。Unicode伴随着通用字符集的标准而发展,同时也以书本的形式对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2016年6月21日公布的9.0.0,已经收入超过十万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。

    Unicode发展由非营利机构统一码联盟负责,该机构致力于让Unicode方案替换既有的字符编码方案。因为既有的方案往往空间非常有限,亦不适用于多语环境。

    Unicode备受认可,并广泛地应用于电脑软件的国际化与本地化过程。有很多新科技,如可扩展置标语言、Java编程语言以及现代的操作系统,都采用Unicode编码。

    编码方式

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

    Unicode原编码占用两个字节,在使用ASCII字符时,高位字节的8位始终为0,这会造成空间的浪费。为了避免这种浪费,Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

    6、UTF-8 编码

    UTF-88-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。

    UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):

    1. 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
    2. 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要两个字节编码(Unicode范围由U+0080至U+07FF)。
    3. 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字,如大部分的汉字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。
    4. 其他极少使用的Unicode 辅助平面的字符使用四至六字节编码(Unicode范围由U+10000至U+1FFFFF使用四字节,Unicode范围由U+200000至U+3FFFFFF使用五字节,Unicode范围由U+4000000至U+7FFFFFFF使用六字节)。

    对上述提及的第四种字符而言,UTF-8使用四至六个字节来编码似乎太耗费资源了。但UTF-8对所有常用的字符都可以用三个字节表示,而且它的另一种选择,UTF-16编码,对前述的第四种字符同样需要四个字节来编码,所以要决定UTF-8或UTF-16哪种编码比较有效率,还要视所使用的字符的分布范围而定。

    编码方式

    • 单字节字符的最高有效比特永远为0。
    • 多字节序列中的首个字符组的几个最高有效比特决定了序列的长度。最高有效位为110的是2字节序列,而1110的是三字节序列,如此类推。
    • 多字节序列中其余的字节中的首两个最高有效比特为10

    二、Charset类

    编码(encode):把明文的字符序列转化成二进制的字节序列。

    解码(decode):把二进制的字节序列转换成明文的字符序列。

    Java默认使用使用Unicode字符集,但是有的操作系统不支持,所以当从操作系统读取到Java程序时,就可能出现乱码的情况。

    JDK1.4提供了Charset来处理字节序列和字符序列(字符串)之间的转换,Charset类是不可变类。

     Set<String>aliases()
              返回包含此 charset 各个别名的集合。
    static SortedMap<String,Charset>availableCharsets()
              构造从规范 charset 名称到 charset 对象的有序映射。
    static CharsetdefaultCharset()
              返回此 Java 虚拟机的默认 charset。
    static CharsetforName(String charsetName)
              返回指定 charset 的 charset 对象。
    static booleanisSupported(String charsetName)
              通知是否支持指定的 charset。
     Stringname()
              返回此 charset 的规范名称。
    abstract  CharsetDecodernewDecoder()
              为此 charset 构造新的解码器。
    abstract  CharsetEncodernewEncoder()
              为此 charset 构造新的编码器。

    该类包含了用于创建解码器和编码器的方法,还提供了获取Charset所支持字符集的方法等。

    Charset类提供了一个availiableCharset()静态方法来获取当前JDK支持的所有字符集。

        public static void main(String[] args) {
            SortedMap<String, Charset> map = Charset.availableCharsets();
            map.forEach((key, value) ->{
                System.out.println("key=" + key + ", value=" + value);
            });
        }

        

    一旦知道字符集的别名后,就可以使用Charset的forName()方法来创建对应的Charset对象,

    然后调用它的newDecode()/newEncode()这两个方法返回CharsetDecoder/CharsetEncoder对象,创建对应的编码器和解码器对象。这两个对象代表Chars的解码器和编码器。

    调用CharsetDecoder的decode方法就可以将字符序列字节序列转换成字符序列(ByteBuffer)->(CharBuffer),同理调用encode就可以将字符序列转换成字节序列。

    在String类里面提供了一个getBytes(String charset)方法。该方法返回byte[],该方法同样可以将制定字符集转换成字节序列。

    注意:通常情况下大小写都能识别,最好使用大写,如UTF-8、GBK。

    1、使用CharsetEncoder编码器将CharBuffer(字符串)转换为ByteBuffer

    2、使用CharsetDecoder解码器将ByteBuffer转换为字符序列CharBuffer(字符串)

        public static void main(String[] args) throws Exception {
            // 创建GBK对应的Charset,并创建编码器
            Charset charset = Charset.forName("GBK");
            CharsetEncoder charsetEncoder = charset.newEncoder();
    
            // 创建CharBuffer对象,放点数据
            CharBuffer charBuffer = CharBuffer.allocate(1024);
            charBuffer.put("字符序列与字节序列转换");
            charBuffer.flip();
    
            // 通过编码器,将CharBuffer转换成byteBuffer
            ByteBuffer byteBuffer = charsetEncoder.encode(charBuffer);
            // byteBuffer读数据打印
            for (int i = 0; i < byteBuffer.limit(); i++) {
                System.out.print(byteBuffer.get(i) + " ");
            }
    
            // 通创建解码器,将ByteBuffer转换成CharBuffer
            CharsetDecoder charsetDecoder = charset.newDecoder();
            CharBuffer charBuffer1 = charsetDecoder.decode(byteBuffer);
            System.out.println(charBuffer.position());
            while (charBuffer1.remaining() > 0) {
                System.out.print(charBuffer1.get() + " ");
            }
        }

     

    参考文章:

    常见字符集及编码

    GBK,BIG5,UCS等字符集编码范围的具体说明

    GB2312, BIG5, UTF8, Unicode之间的互换

     

    —— Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。

    展开全文
  • 这些字符包括: ASCII 控制字符 – 不宜打印的字符通常用于输出控制。字符范围是十六进制的 00-1F(十进制的 0-31)和 7F(十进制的 127)。下面提供了完整的编码表。 非 ASCII 控制字符 – 这些字符超出了 128 个 ...
  • 字符编码常用种类介绍

    万次阅读 2018-11-06 14:31:10
    字符编码常用种类介绍 第一种:ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今...

    字符编码的常用种类介绍

    在这里插入图片描述

    第一种:ASCII码

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。如下图所示:
    在这里插入图片描述

    由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A的编码是65,小写字母 a的编码是97。后128个称为扩展ASCII码。

    在这里,每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位,每8个bit组成一个字符,这是计算机中最小的存储单位。

    常见换算单位:

    bit 位,计算机中最小的表示单位

    8bit = 1bytes 字节,最小的存储单位,1bytes缩写为1B

    1KB=1024B

    1MB=1024KB

    1GB=1024MB

    1TB=1024GB

    第二种:GBK 和 GB2312

    对于我们来说能在计算机中显示中文字符是至关重要的,然而ASCII表里连一个偏旁部首也没有。所以我们还需要一张关于中文和数字对应的关系表。一个字节只能最多表示256个字符,要处理中文显然一个字节是不够的,所以我们需要采用两个字节来表示,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    第三种:Unicode

    但如以来,就会出现一个问题,各个国家都一套自己的编码,就不可避免会有冲突,这是该怎么办呢?

    因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

    Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

    现在,分析一下ASCII编码和Unicode编码的区别:

    ASCII编码是1个字节,而Unicode编码通常是2个字节。

    字母A用ASCII编码是十进制的65,二进制的01000001;

    字符0用ASCII编码是十进制的48,二进制的00110000;

    汉字“中”已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。

    如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。

    但如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

    第四种:UTF-8

    基于节约的原则,出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间了。如下所示:
    在这里插入图片描述

    从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

    我们总结一下现在计算机系统通用的字符编码工作方式:

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。如下图:

    在这里插入图片描述
    从http://www.cnblogs.com/schut/p/8406897.html 搬运

    展开全文
  • 常见字符编码介绍

    千次阅读 2022-03-25 09:48:21
    ASCII是美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256(2^80)个字符 (包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。基本的 ASCII 字符集共有 128 个...
  • Java常用字符编码详解

    千次阅读 2021-02-26 12:01:02
    Java常用字符集编码详解Web开发的时候经常会遇到一些字符编码的错误,如页面乱码等问题,所以有必要需对字符编码有所了解,以下是Ricki收集的一些资料(可能不是很全,但希望对你有所帮助)Java标准字符集:所谓Java...
  • 字符编码简介

    千次阅读 2021-12-28 21:40:16
    目录 一、ascii编码 二、扩展ascii编码 三、多字节编码(multi bytes) 四、宽字符编码(wide char) 五、unicode编码 六、utf-8编码 七、结语
  • 字符编码查询,包括中文和英文字符编码快速查询工具,
  • 常见的字符编码

    千次阅读 2020-11-16 20:39:32
    一、ASCll码 ASCll 128 一个英文字母占1个字节 二、BIG5 BIG5 三、GBK GBK GB2312 一个汉字占2...UTF-8 可变长编码(汉字三个字节,英文一个字节) 六、编译 编译:把文字翻译为二进制代码;把文本翻译位机器码。 ...
  • 常见单位换算 bit 位 计算机的最小表示单位(0,1...字符编码 ASCII码 一个字节表示具体的字符,只用了后七位(2 ^ 7 = 128)最前面的一位统一为0,能够表示128个字符,其中包括了英文字符、阿拉伯数字、西文字符以及
  • 一、字符集 1)字符与字节(Character) 字符是各种文字和符号的总称,包括乱码;一个字符对应1~n个字节,...字符集大多对应一种编码方式(例如GBK对应GBK编码),但Unicode编码有多种,包括UTF-8、UTF-16、UTF-32和UT
  • 字符集和字符编码1.1 编码和解码1.2 字节和字符1.2 实验环境2. 安装过程2.1 Python 和 Django2.2 PostGIS2.3 psycopg22.4 PROJ.4,GDAL和GEOS2.5 配置环境变量3. 测试GeoDjango3.1 准备3.2 创建新项目3.2 查看地理...
  • 在计算机世界中,只有0、1两种数字,不论是英文、中文还是数字,在计算机中都是以01的形式存储的。因此,要想把文字存储到计算机上...编码就是规定特定的01序列来表示文字的过程,编码表示了字符在计算机中的存储形式。
  • 计算机字符编码——ASCII码和常用编码 ASCII码 基本介绍 上个世纪60年代, 美国制定了一套字符编码, 对英语字符与二进制位之间的关系, 做了统一规定,这被称为ASCII码。 ASCII码一共规定了128个字符的编码, 比如...
  • 了解一种字符编码主要是要了解该编码编码范围,编码对应的字符集(都包含哪些字符),和其他字符编码之间的关系等。ASCIIASCII码是7位编码编码范围是0x00-0x7F。ASCII字符包括英文字母、阿拉伯数字和标点...
  • 从Windows计算机中提取的GB18030编码、utf-8编码、utf-16be编码及对应的字符。内容包括95个ASCII可显示字符,所有GB18030双字节编码和所有GB18030四字节编码(部分双字节和四字节编码是没有定义字符的)。
  • Java字符编码设置总结

    千次阅读 2021-02-13 00:04:59
    1、eclipse workspace中的字符编码:windows->Preferences->general->Workspace以后新建立工程其属性对话框中的Text file encoding即为UTF-8,这个也是安装完Eclipse之后应该立刻做的第一件事,但是这种...
  • 字符编码方式

    千次阅读 2021-10-25 15:40:11
    一、字符编码方式: 1.ASCII编码:1个字节,8位 2.Unicode编码:2个字节,16位(解决ASCII码位数不够无法表示汉字等问题,即解决乱码问题) 3.UTF-8编码:根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1...
  • 字符编码

    千次阅读 2020-07-15 19:47:50
    一、了解字符编码表 一:计算机基础知识 1、程序运行与三大核心硬件(cpu,内存,硬盘)的关系: 任何一个程序都是先存放于硬盘上的,必须先由硬盘读取到内存,之后cpu去内存中取值然后执行 2、程序运行过程中产生的...
  • 字符编码的常见几种类型介绍

    千次阅读 2021-11-17 14:47:08
    字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将...
  • 【附章5计算机字符编码】多种字符编码集的说明

    千次阅读 多人点赞 2022-01-29 16:43:48
    【附章5计算机字符编码:基础知识、ASCII、ISO8859-1、GB2312、GBK、Unicode、UTF-8】多种字符编码集的说明
  • VB6.0语言,中英字符串转Unicode编码十六进制字符串源码,做成函数,可以直接调用!!包含两种方式
  • 也谈计算机字符编码 值得收藏 1) 每种ANSI编码或者说ANSI字符集只规定自己国家或地区使用的语言所需的'字符';比如中文GB-2312编码中就不会包含韩国人的文字。 2) ANSI字符集的空间都比ASCII要大很多,一个字节已经...
  • java获取文本文件字符编码的方法

    千次阅读 2021-02-27 10:05:57
    java获取文本文件字符编码的方法发布时间:2020-06-16 09:56:08来源:亿速云阅读:386作者:Leah这篇文章将为大家详细讲解有关java获取文本文件字符编码的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家...
  • chop执行去除空格处理,get_html_translation_table返回转化列表到变量,定义包括HTML编码字符串htmlentities,htmlspecialchars_decode 定义包含HTML特殊字符字符串,nl2br quotemeta rtrim等. 定义和用法:chop() ...
  • HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。 GB2312 GB2312是基于区位码设计的,区位码把编码表...
  • 各种字符编码详解【图文教程】

    千次阅读 2020-10-12 12:32:59
    字符编码任你玩,看这一篇就够了~
  • - Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。 - UTF-8是一种常见的基于Unicode字符集的编码方式。 - GB2312是面向简体中文,BIG5是面向繁体中文。 - Unicode还在其发展期,Unicode、GB...
  • Python语言在网络爬虫领域应用的十分广泛。在爬虫的应用程序中,我们需要对...先开始我们不讲编程,不堆概念,我们讲讲故事:说说字符编码是如何变成今天这样的关于字符编码的概念太多太杂,当ASCII、GB2312、Unicod...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 782,035
精华内容 312,814
热门标签
关键字:

常用的字符编码包括