浅析字符编码的范围及之间的关系

前言

由于要解决文档中的乱码,就查找了乱码产生的原因。
乱码是因为解码方式和编码方式不一致导致的!!!
如用UTF-8编码“中文”这个词,用ASCll来解码,会输出??
,用GBK中就会输出乱码(看不懂的符号)。
在此总结下字符的编码格式:

ASCII 码

ASCII 码(美国信息互换标准代码),使用一个字节(byte)进行存储。包含英文,标点符号,数字。适用于纯英文环境的使用。互联网初期通用编码!
一个字节包含8个二进制位bit(00000000-11111111),可以存储256种状态。

Unicode 字符集:

包含当前出现的所有字符,每个字符一个唯一的码点(code point)。但未规定存储方式。java默认使用Unicode字符集。编码方式包含:UTF-8,UTF-16,UTF-32 三种

  UTF-8

UTF-8 是Unicode字符集实现的一种编码方式,仅包含Unicode的一部分内容,可供日常使用
特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。java默认使用utf-8编码方式

UTF-8 的编码规则很简单,只有二条:
1)对于单字节的符号:字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的;
2)对于n字节的符号(n > 1):第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

UTF-16	UTF-16 编码最小单位是两个字节,所以有字节序的问题(分大端序和小端序)。jvm中采用utf-16进行存储

UTF-32	采用4个字节存储。码点值是多少,内存中就存多少

中文编码

gb2312,GBK,gb18030

GB2312		中国国家标准简体中文字符集。收录6763个汉字,基本满足了字的计算机处理需要。
GBK			GBK是gb2312的扩展级,包含了更多的汉字!只是一种标准。
GB18030		全称《信息技术 中文编码字符集》。收录汉字70,244个。兼容gb2312和GBk

其他

 ISO-8859-1	单字节编码,向下兼容ASCII,增加了欧洲的部分字符,字符范围是0-255

编码转化方式

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

  1. GBK、GB2312 --先转–> Unicode --再转–> UTF8
  2. UTF8 --先转–> Unicode–再转–> GBK、GB2312

小结

ASCII码使用一个字节存储,是最基础的一种编码格式。其中的非打印类的字符均包含在其他的编码格式中;
Unicode包含的字符最多,UTF-8在互联网上使用最多

中文主要涉及三大派系:

  • ASCll
  • Unicode
  • GBK

参考文档:

字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

计算机字符编码的前世今生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值