这两天碰见一个Bug,涉及到字符编码,索性研究了下,整理出来,以便今后查阅。

ASCII码,0~127,128个,这个就不用多说了,他是计算机文明的基石。但是这里面只有英文字母,其他国家如何把本国的文字输入到电脑中呢?所以基本每种语言都有自己的字符集,如汉字就有GB2312(简体中文),BIG5(繁体中文)等等。

但不同的ANSI编码在不同语言之间是不兼容的,所以对于不同的操作系统之间文件的传输,或者在同样的操作系统下,源文件语言不同于OS的语言文件的传输,需要转换成UT8格式。

如何转换呢?

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312 -->  Unicode  -->  UTF-8 
UTF-8               -->  Unicode   -->  GBK、GB2312

具体区别:

ANSI: 16384个字符。这就是ANSI字符标准。英文一个字节,中文两个字节。中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准。对于ANSI,不同的国家和地区制定了不同的标准,由此产生了GB2312(简体中文),BIG5(繁体中文),JIS(日文)等各自的编码标准。但不同的ANSI编码在不同语言之间是不兼容的,所以对于不同的操作系统之间文件的传输,或者在同样的操作系统下,源文件语言不同于OS的语言文件的传输,需要转换成UT8格式。

UNICODE:使用两个字节对世界上几乎所有的语言进行编码(0x0000-0xFFFF),65536个字符,每种语言的代码段不同,两个字节(英文、中文都是两个字节)所表达的字符是唯一的,所以不同语种可以共存于文本中,解决国际化的问题。

UTF-8: 是Unicode一种压缩形式,英文A在Unicode中表示为0x0041,老外觉得这种存储方式太浪费,因为浪费了50%的空间,于是就把英文压缩成1个字节,成了UTF-8编码,但是汉字在UTF-8中占3个字节,显然用做中文不如ANSI合算,这就是中国的网页用作ANSI编码而老外的网页常用UTF-8的原因。

特别提下 Unicode 和 UTF-8 区别

Unicode字符集,它固定使用16bits(两个字节)来表示一个字符,共可以表示65536个字符, 标准的Unicode称为UTF-16(UTF: UCS Transformation Format )。

后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。毕竟互联网70%以上的信息仍然是英文。如果连英文都用2个字节存取(UCS-2),空间浪费不就太多了?

所谓UTF-8就是这样一个为了提高英文存取效率的字符集转换格式:Unicode Transformation Form 8-bit form。用UTF-8,UNICODE的2字节字符用变长个(1-3个字节)表示:

对英文,仍然和ASCII一样用1个字节表示,这个字节的值小于128(/x80);
对其他语言的用一个值位于128-256之间的字节开始,再加后面紧跟的2个字节表示,一个字符一共是3个字节;

UTF-8编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长。
Bigendian UCS-4 字节串的排列顺序是预定的。
字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到。
下列字节串用来表示一个字符。用到哪个串取决于该字符在 Unicode 中的序号.

U-00000000 - U-0000007F:  0xxxxxxx 
U-00000080 - U-000007FF:  110xxxxx10xxxxxx 
U-00000800 - U-0000FFFF:  1110xxxx10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF:  11110xxx10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF:  111110xx10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF:  1111110x10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

xxx 的位置由字符编码数的二进制表示的位填入。越靠右的 x 具有越少的特殊意义。只用最短的那个足够表达一个字符编码数的多字节串。注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.

例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为:

11000010 10101001 = 0xC2 0xA9

而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:

11100010 10001001 10100000 = 0xE2 0x89 0xA0

这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format。

ANSI, UTF-8, Unicode, GBK, GB2312 字符编码小结相关推荐

  1. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  2. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集

    首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态 ...

  3. 字符编码——详解常用字符集(ASCII,ISO8859-1,GB2312,GBK,Unicode)和字符编码(UTF-8,UTF-16)

    目录 ASCII 由来 包含哪些字符 采用什么字符编码,如何编码 每个字符占几个字节 ISO8859-1 由来 包含哪些字符 采用什么字符编码,如何编码 每个字符占几个字节 GB2312 由来 包含哪 ...

  4. ASCII GBK Unicode 等各种字符编码

    ASCII 码(仅适用全英文字符): 编码规则:总共0~127共128个字符编码:占用一个字节的后面7位,最前面的一位统一规定为0 0-31及127(共33个)是控制字符或通信专用字符(不可显示字符) ...

  5. 什么是像ANSI和Unicode这样的字符编码,它们有何不同?

    ASCII, UTF-8, ISO-8859- You may have seen these strange monikers floating around, but what do they a ...

  6. EBCDIC 与 GBK 的字符编码及其转换(转)

    概览 有些用户在使用 AIX 时在字符编码方面遇到一些困惑,请看下面的场景: 1,用户用从 AIX 利用 FTP 客户端登录上 IBM i,切换到某个 Library/File,然后 get 其中的某 ...

  7. 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式

    一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中),有些字符的编号(即码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两 ...

  8. 详解Unicode字符集以及字符编码实现(一)

    在日常生活中,我们经常会碰到打开一个文件,但是文件内容乱码的问题,比如我想看<西游记>这部小说. 下载链接:https://m.ijjjxs.com/txt/dl-35-12585.htm ...

  9. 详解Unicode和JavaScript字符编码

    Unicode Unicode,又称万国码.统一码和国际码,是由统一码联盟制定的一套规范统一的字符编码集,其设计意图是将世界上所有字符都包含在其中,它使用特定的十六进制编号来表示字符,每一个特定十六进 ...

最新文章

  1. matlab preloadfcn,运行xilinx blockset中的错误包含在matlab中
  2. 光电编码器的原理及应用场合_光电传感器原理及应用
  3. mysql update join 锁表_Mysql事务中Update是否会锁表?
  4. 数据库日常总结(笛卡儿积与笛卡儿集 )
  5. HDU4055 - number string(DP)
  6. SharePoint 2013的REST编程基础
  7. Mounting A Windows Share On AIX Using CIFS
  8. 米斯特白帽培训讲义 工具篇 Safe3 WVS
  9. ASP.NET MVC中的安全性
  10. Android开发笔记(二)颜色的使用
  11. vue-cli项目中单文件组件引入bootstrap.js异常的解决方案
  12. 记录几个Maven库地址
  13. cad刷新快捷键_100个快捷键50个CAD技巧,助你玩转CAD
  14. win10之缺少一个或者多个协议(只能上qq不能上网)
  15. 微信电子商务的B店战略和C店战术
  16. CEPH告警:health_warn 45 pgs degraded;60 pgs unclean; 45 pgs undersized
  17. 解决FTP上传时报错“父路径不存在”问题
  18. 多态之父类引用指向子类对象
  19. oracle purge作业,Oracle purge用法介绍
  20. MIC29302WU不调压的问题

热门文章

  1. Jetson AGX Orin 刷机采坑全过程
  2. Pokemon Go游戏开发教程(持续更新)
  3. 微信朋友圈广告投放怎么做?
  4. Responder使用方法
  5. MySQL自带的加密AES_ENCRYPT()解密AES_DECRYPT()
  6. Odoo V13 免费开源ERP 系统E-mail邮件功能设置操作指南
  7. 【数据库管理】⑧检查点checkpoint
  8. A-模块 配置splunk
  9. TCP/ip实现客户端并发登录
  10. xlsxwriter EXCEL文件的写入