ASCII编码

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

ISO-8859-1编码

ASCII码主要是为了表示英文字符而设计的,英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是ISO组织在ASCII码基础上又制定了一系列标准用来扩展ASCII编码,它们是ISO-8859-1~ ISO-8859-15,其中ISO-8859-1覆盖了大多数西欧语言字符,所以应用得最广泛。

ISO-8859-1仍然是单字节编码,它总共能表示256个字符。ISO-8859-1向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。所以,Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。

因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。

GB2312编码

GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用。GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。同时,GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

分区表示:

GB2312编码对所收录字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。这种表示方式也称为区位码。

01-09区收录除汉字外的682个字符。

10-15区为空白区,没有使用。

16-55区收录3755个一级汉字,按拼音排序。

56-87区收录3008个二级汉字,按部首/笔画排序。

88-94区为空白区,没有使用。

举例来说,“啊”字是GB2312编码中的第一个汉字,它位于16区的01位,所以它的区位码就是1601。

双字节编码:

GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。例如最后一个码位是9494,区号和位号分别转换成十六进制是5E5E,0x5E+0xA0=0xFE,所以该码位的GB2312编码是FEFE。

GB2312编码范围:

GB2312编码范围是A1A1-FEFE,其中汉字的编码范围为B0A1-F7FE,第一字节0xB0-0xF7(对应区号:16-87),第二个字节0xA1-0xFE(对应位号:01-94)。

BIG5编码

BIG5编码是台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。BIG5编码又称大五码,是繁体中文字符集编码标准,共收录13060个中文字,其中有二字为重复编码。

BIG5采用双字节编码,使用两个字节来表示一个字符。高位字节使用了0x81-0xFE,低位字节使用了0x40-0x7E,及0xA1-0xFE。在BIG5的分区中:

8140-A0FE 保留给使用者自定义字符(造字区)

A140-A3BF 标点符号、希腊字母及特殊符号。其中在A259-A261,收录了度量衡单位用字:兙兛兞兝兡兣嗧瓩糎。

A3C0-A3FE 保留。此区没有开放作造字区用。

A440-C67E 常用汉字,先按笔划再按部首排序。

C6A1-F9DC 其它汉字。

F9DD-F9FE 制表符。

值得留意的是,BIG5重复地收录了两个相同的字:“兀、兀”(A461及C94A)、“嗀、嗀”(DCD1及DDFC)。

ANSI编码

针对汉字的编码,不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI 编码。

ANSI全称是AMERICAN NATIONAL STANDARDS INSTITUTE,美国国家标准学会。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。

Unicode简介

Unicode是为整合全世界的所有语言文字而诞生的。任何字符在Unicode中都对应一个值。这个值就可以称为这个字符的Unicode值。Unicode的值通常写成 U+ABCD 的格式。

为什么采用这种方式表示呢?这其中还有个过程。为了统一全世界的字符编码,最初有两个组织各自独立指定标准:

(1)ISO制定了通用字符集(Universal Character Set,UCS)。UCS包括UCS-2和UCS-4。UCS-2用两个字节编码,UCS-4用4个字节编码。

(2)多语言软件制造商组成的统一码联盟,它开发的统一码项目,制定了Unicode项目。

后来,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode 2.0开始,Unicode采用了与ISO的UCS编码;ISO也承诺,UCS编码将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。所以,现在Unicode都是使用U+ABCD 的格式。

UCS2和UCS4编码

Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(Code Point)。代码点的值通常写成 U+ABCD 的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。

为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。

UTF-16编码

UTF是Unicode Transformation Format的缩写,表示了Unicode的存储转换形式。Unicode只表示了字符的代码点。如何存储则是通过UTF规定来实现的。最常见的就是UTF-16和UTF-8。

UTF-16是完全对应于UCS-2的,即把UCS-2规定的代码点通过Big Endian或Little Endian方式直接保存下来。所以UTF-16采用2个字节来存储Unicode。UTF-16也可以表示UCS-4的部分字符,所以UTF-16也采用4个字节来存储Unicode。

Big Endian和Little Endian

一个字符可能占用多个字节,那么这多个字节在计算机中如何存储呢?比如字符0xABCD,它的存储格式到底是AB CD,还是CD AB 呢?实际上两者都有可能,并分别有不同的名字。如果存储为AB CD,则称为Big Endian;如果存储为 CD AB,则称为Little Endian。

具体来说,以下这种存储格式为Big Endian,因为值(0xABCD)的高位(0xAB)存储在前面:

地址 值

0x00000000 AB

0x00000001 CD

相反,以下这种存储格式为Little Endian:

地址 值

0x00000000 CD

0x00000001 AB

UTF-8编码

通常情况下,UTF-16统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要用两个字节表示,存储空间放大了一倍,而在网络带宽还非常有限的情况下,这样会增大网络传输的流量,而且也没有必要。而UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以由1-6个字节组成。UTF-8的编码规则是:

(1)如果一个字节,最高位(第8位)为0,表示这是一个ASCII字符(00-7F)。可见,所有的ASCII编码已经是UTF-8了。

(2)如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。

(3)如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。

UTF-16编码和Java,UTF-8编码和互联网

Java采用UTF-16编码。在Java诞生的时候,UTF-16编码使用的更广泛,而且定长编码的形式也方便计算器处理。后来,随着互联网的流行和壮大,UTF-8编码才得以出现。UTF-8采用变长字节的方式编码,这样在传输过程节省了带宽。

java gb13000 ucs2_java Java与编码相关推荐

  1. Java几种常见的编码方式

    几种常见的编码格式  为什么要编码  不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的 ...

  2. 哈夫曼编码 译码java_基于Java的哈夫曼编码译码系统_报告毕业论文

    基于Java的哈夫曼编码译码系统_报告毕业论文 1课 程 设 计Java 与面向对象程序设计课程设计基于 Java 的哈夫曼编码译码系统1.问题描述和分工情况1.1 问题描述使用 Java 语言实现哈 ...

  3. java I/O 以及文件编码

    参考:http://www.blogjava.net/haizhige/archive/2008/08/03/219668.html 总结一下就是: *stream 是对字节进行操作 *Reader, ...

  4. JAVA字符流与字符集编码

    http://elf8848.iteye.com/blog/271742 问题: 当用JAVA字符流向硬盘写一个a.txt文件时,默认情况下a.txt 会使用什么字符集编码? 分析: "字符 ...

  5. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...

  6. 求解哈夫曼编码Java实现,用Java实现哈夫曼编码解决方法

    当前位置:我的异常网» J2SE » 用Java实现哈夫曼编码解决方法 用Java实现哈夫曼编码解决方法 www.myexceptions.net  网友分享于:2013-01-08  浏览:13次 ...

  7. java io流学设置编码_Java学习日志(21-2-IO流-基本数据类型与字节数组对象与、编码解码)...

    操作基本数据类型的流对象DataStream /* 可以用于操作基本数据类型数据的流对象 */ import java.io.*; class DataStreamDemo{ public stati ...

  8. Java如何进行Base64的编码(Encode)与解码(Decode)?

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

  9. Java——I/O(字符编码、内存流、打印流、System、输入流、序列化)

    目录 1.常见的编码 2.乱码产生原因 3.内存流 3.1 分类 3.2应用 4.打印流 4.1 自定义打印流 4.2 系统提供的打印流 4.3 格式化输出 5.System对I/O的支持 6.两种输 ...

最新文章

  1. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
  2. python处理速度_如何让Python处理速度翻倍?内含代码
  3. Office安装时报错1907的解决方法
  4. session开启慢的原因及解决办法
  5. springboot(2.2.4)配置druid的log4j2日志监控
  6. 使用vuex实现父组件调用子组件方法
  7. 第四节:框架前期准备篇之进程外Session的两种配置方式
  8. sqlserver evaluation是什么版本_SQL Server 基础知识
  9. Java序列化的这三个坑千万要小心
  10. poj 2976 Dropping tests 01分数规划
  11. docker——容器(container)
  12. 视频:Microsoft PDC 09,算法及数据结构内容及其他
  13. [diy-windows系统] Windows下dism 集成系统补丁、驱动
  14. Tomcat发布项目后JS中文乱码
  15. CSS 加粗(css font-weight)
  16. 漏洞:互联网时代的阿喀琉斯之踵 挖掘漏洞哪家强?
  17. [id: * L:/* ! R:/*] onUncaughtException(SimpleConnection{channel=[id: *
  18. 什么是云计算?这个愚蠢的流行词是什么意思?
  19. 凝思系统机器名怎么查看_凝思操作系统Custom Linx安装教程
  20. python复制单元格格式太多_你觉得复制粘贴excel浪费时间,那你该学这些技巧

热门文章

  1. 老生常谈:微博,QQ,淘宝三种开放平台对比
  2. 湖北武汉机械员报考机械员培训改革的三大变化建筑七大员报考
  3. Active Map v2000 1CD
  4. JQuery实现不偷看密码的猫头鹰
  5. Xilinx FPGA 架构简介
  6. lisp绘制直齿圆柱齿轮_基于AutoLISP的模拟滚齿以及滚刀齿形验证
  7. 计算机基础及应用论文,计算机基础应用论文范文
  8. 迅雷 v7.2.13.3884 新春特别版
  9. 旅馆住宿管理系统(c++)
  10. python离线手册chm_jQuery 3.1 参考手册.CHM离线版下载