1 ASCII码

统一规定英语字符与二进制位之间的关系。ASCII码一共规定了128个字符的编码。例如,空格“SPACE”是32(二进制00100000),大写字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号)只占用了一个字节的后面7位,最前面的1位统一规定为0。

2 非ASCII编码

表示非英语的其他语言时,128个符号是不够的。例如,在法语中,字母上方有注音符号,无法用ASCII码表示。于是,一些欧洲国家就决定:利用字节中闲置的最高位编入新的符号。例如,法语中的é的编码为130(二进制是10000010)。这样可以表示256个符号。

但是,不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。例如,130在法语编码中代表é,在希伯来语编码中代表字母Gimel (?),在俄语编码中代表另一个符号。0-127表示的符号是一样的,不一样的是128-255这一段。汉字多达10万左右,需要使用多个字节表示一个汉字。例如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个汉字。虽然都是用多个字节表示一个符号,但是GB类的汉字编码与下面的Unicode和UTF-8是没关系的。

3 Unicode

世界上存在多种编码方式,同一个二进制数字可以被解释成不同的符号。之所以电子邮件经常出现乱码,是因为发信人和收信人使用的编码方式不一样。作为所有符号的编码,Unicode纳入了世界上所有的符号,给予每一个符号一个独一无二的编码。它是一个庞大的集合,可以容纳100多万个符号。例如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字严。具体的符号对应表,可以查询http://www.unicode.org/或者汉字对应表。

Unicode的问题

Unicode只是一个符号集,只规定了符号的二进制编码,但没有规定存储方式。例如,汉字严的Unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101)即需要2个字节。不同的符号需要的字节数量不同。存在如下2个问题:

1 如何区别Unicode和ASCII?

计算机怎么知道3个字节表示一个符号,而不是分别表示3个符号呢?

2 容易出现空间浪费

英文字母仅需一个字节。如果Unicode统一规定每个符号用3个或4个字节表示,那么存储英文字母时会出现2个或3个字节全是0,浪费空间。

于是,出现了Unicode的多种实现方式。

4 UTF-8

UTF-8是互联网上使用最广的一种Unicode实现方式。其他实现方式包括UTF-16(字符用2个字节或4个字节表示)和UTF-32(字符用4个字节表示)。UTF-8是一种可变长的编码方式,使用1~4个字节表示一个符号,根据不同的符号调整字节数量。

UTF-8的编码规则:

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

2 对于n个字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位均设为10。剩下的二进制位由这个符号的Unicode编码从后向前依次填入,空位补0。

编码规则总结见下表,字母x表示可编码的位:

以汉字严为例,如何实现UTF-8编码:

已知严的Unicode是4E25(100111000100101),根据上表,4E25处在第3行的范围内(0000 0800-0000 FFFF),所以严的UTF-8编码需要3个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从严的最后一个二进制位开始,依次从后向前填入格式中的x,空位补0。于是,严的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制是E4B8A5。

参考资料

原文:http://www.cnblogs.com/WJQ2017/p/7735522.html

java ascii 编码方式,Java 字符编码 ASCII、Unicode和UTF-8相关推荐

  1. php的内部方法编码方式,字符集字符编码以及PHP中的一些转码方法

    在重写一些老的项目的时候,有可能会遇到这种情况 ¾ÍÒµÖ¸µ¼ÖÐÐÄ2010Ä꺮¼Ù·Å¼Ù֪ͨ �����˵�λ������� ???????? 这就是传说中的乱码,要想处理乱码,得先了 ...

  2. python查看字符串编码方式_Python字符编码判断方法分析

    本文实例讲述了Python字符编码判断方法.分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用 ...

  3. python字符编码讲解_python 字符编码讲解

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  4. 【转】刨根究底字符编码之九——字符编码方案的演变与字节序

    字符编码方案的演变与字节序 一.字符编码方案的演变 1. 根据前面的介绍,对于字符编码方案的演变,我们大致上可简单地划分为三个阶段: ① ASCII编码方案阶段 → ② ANSI编码方案阶段 → ③ ...

  5. c语言 字符转换成ascii吗,C语言字符转换ASCII码

    //函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: //调用函数: //全局变量: //输    入:ASCII字符 //返    回:16进制 / ...

  6. mysql 数据库编码怎么看,查看数据库编码_查看mysql编码方式 mysql数据库编码查看方法...

    摘要 腾兴网为您分享:查看mysql编码方式 mysql数据库编码查看方法,桌面日历,智能互联,政务易,优美图等软件知识,以及pptv版,广东省app,京东钱包app,星露谷物语补丁,51管家,翡翠出 ...

  7. 高速串行通信常用的编码方式-8b/10b编码/解码

    绪论 8b/10b编码/解码是高速串行通信,如PCle SATA(串行ATA),以及Fiber Channel中常用的编解码方式.在发送端,编码电路将串行输入的8比特一组的数据转变成10比特一组的数据 ...

  8. php 删除mysql 返回_php 返回mysql字符编码与删除字符编码

    php 返回mysql字符编码与删除字符编码 function Ebak_GetSetChar($char){ global $empire; if(empty($char)) { return '' ...

  9. ASCII+Unicode+UTF8(字符编码方式-字节) Base64(字节编码方式-64字符)

    Base64 编码是一种可以把二进制文件编码成文本的编码规则.在很多地方地方都有用到,比如我们可以把图像转成 Base64 编码,然后内联到 HTML 或者 CSS 中. Base64 编码用一些很常 ...

最新文章

  1. 小于60的数中能被1到10整除的数量
  2. Android:学习AIDL,这一篇文章就够了(上)
  3. 10 个经典的 Java 集合面试题,看你能否答得上来?
  4. oracle 如何显示 比例,Oracle中如何兼得比例和时间
  5. android开发菜单,Android学习指南之十六:Android菜单详解
  6. Python | 使用matplotlib.pyplot创建线图
  7. sql如何处理null值_如何正确处理SQL中的NULL值
  8. java 时间类 joda_Java日期类Joda-time的使用及性能对比
  9. 如何读懂 C 语言复杂的声明
  10. ubuntu下的linux怎样备份文件,Ubuntu系统如何备份还原?Ubuntu系统备份还原教程
  11. java中sql语句怎么把开始和结束时间作为参数写sql查询_JDBC数据库连接怎么操作?...
  12. 爬虫-使用xpath拿36KR的数据-xpath的学习与演练
  13. Xcode因为证书问题经常报的那些错
  14. 淘宝商品比价定向爬虫
  15. React全家桶详细讲解-图文并茂
  16. Spring Boot (八): Mybatis 增强工具 MyBatis-Plus
  17. Docker 映射端口telnet不通
  18. 百度地图集成,经纬度返回 4.9e-324
  19. Arouter 跳转失败activityResumeTrigger: not whiteListed
  20. 特斯拉第二季度电动汽车销量下降近 18%

热门文章

  1. 创建新Docker容器时出现“The container name /xxx is already in use by container xxxxxxxxxxx...”问题的解决办法
  2. 邓明善:一定要学会与机遇博弈
  3. 推荐一款跨平台视频播放器:ZY-Player
  4. 稳定排序与不稳定排序方法
  5. 数据库范式——(1NF,2NF,3NF,BCNF,含实例分析)
  6. rviz显示矩形框BoundingBox
  7. CSS3实现图片翻转效果
  8. 高一必修一 第一单元
  9. 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1514378309187...
  10. 小游戏 《唐僧大战白骨精》