关于常用字符编码的测试

  在编程之中经常会遇到编码的问题,尤其是在web开发中经常会遇到乱码,这是一个很让人头疼的问题,以前对于编码的知识仅限于知道有哪几种常用的编码,比如ASCII,Unicode,GBK等,遇到乱码的时候把编码改成gbk或者utf-8试试就行了,但是觉得这样始终不是解决问题的方法,于是乎今天找了很多关于字符编码的博文来看,对于字符的编码也理解了好多,在这里将自己理解到的先放上来,如果有什么没理解对的地方希望各位予以纠正。

  ASCII(American Standard Code for Information Interchange,美国信息互换标准代码),这是我们学编程最早接触到的编码了,主要用于显示现代英语,仅用一个字节来表示字符,而且只用了这个字节的后七位,所以总共可以表示128个字符,所以我们表示‘xiao123’这个字符串的时候仅用7个字节就能表示出来,但是ASCII码只能显示美国英语和一些西欧语言,如果其余国家的人想用计算机,这显然是不可行的。

  

 

  利用windows7自带的记事本进行测试,打开记事本程序,输入'123456中',一个7个字符,我们在保存的时候选择ANSI编码,保存为test.txt,ANSI一般在简体中文系统中表示的是GB2312编码,所以我们接下来验证一下

  打开属性发现这个文件占了八个字节,也就是说我们刚才输入的7个字符占了8个字节,利用java的文件输入流将这个文件按字节输出,结果读取到了49 50 51 52 53 54 -42 -48 ,前面六个数字可以理解为'123456'六个字符的ASCII码,因为GB2312是向下兼容ASCII码的,所以这里存储'123456'还是以ASCII值存储的,后面的'中'字存储下来为-42 -48,读取出来的为补码值,-42 -48这里表示二进制补码为 1010 1010 1011 0000 ,转换为原码为 1101 0110 1101 0000,转换为16进制为 D6 D0,为什么要转换为16进制呢,因为我们要去查询GB2312的编码表,

查询GB2312编码表结果D6D0果真是'中',这里我们验证了windows7中简体中文系统中ANSI编码是用的GB2312编码。

  接下来测试在记事本保存的时候选择Unicode码(这应该是小端编码),查看所占字节

发现占了16个字节,也就是说7个字符占了16个字节,这是怎么来的呢,我们利用java的字节输入流读入输出结果为-1 -2 49 0 50 0 51 0 52 0 53 0 54 0 45 78,原来Unicode文本前面的两位是BOM(Byte Order Mark)字节顺序标记,这是用是于识别用的是哪一种Unicode编码的,-1 -2 转换为原码十六进制为 FF FE  这种编码表示的是UTF-16/UCS-2 小端,于是后面两位为一个字符,第一个字符为49 0 即是 表示的值为0000 00000 0011 0001这个数,最后的45 78 ,表示数字二进制为0100 1110 0010 1101 ,转换为原码 16进制为4E 2D查询Unicode编码表结果的确为'中'字,所以此处Unicode码为 UTF-16/UCS-2 小端.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值