一、前言
无论学习什么语言,只要涉及到了实际开发程序,并且需要处理外部数据的时候,编码都是一个大问题。
而很多人,尤其是初学者,又很难搞清楚这个问题,所以本文就来详细介绍一下编码。
二、什么是编码?
编码主要体现在字符串中,更确切的说,应该是体现在屏幕上,因为字符串在内存中本质上也只是一堆数字。
如果很难理解,但你已经有了一点编程基础,建议你阅读一下该文:数据类型,相信会让你有不一样收获。
这是一个非常重要的点:计算机只能存储二进制数字。
而为了让数字在屏幕上显示出来成为字符,就出现了编码这一概念,它的作用就是将字符与数字进行映射。
比如常见的ASCII码表,就是将数字65
映射成为了字符A
,数字48
映射成为了字符0
。
但遗憾的是,ASCII
码表只映射了128
个字符,也就是以英文为标准的所有字符、字母,因为电脑就是美国发明的,英文只需要这么多个字符就足够了。
所以它的字符只需要一个字节就可以表示了,也就是8位,虽然事实上只需要7位,甚至不到一个字节(2的7次方为128,2的8次方为256),但或许是为了对齐、同时为以后继续添加其它字符预留空间考虑,最终使用了一个字节。
随着后面全球化的进程,其它国家都想使用电脑,但各个国家的母语又不全部是英语,这怎么办?
就以咱中文来说,常用的汉字就有几千个,你一个字节肯定不够用啊!
所以各个国家就开始自己搞自己的编码页了,也就是我们在windows电脑的记事本中,常能看到的一个叫做ANSI的编码:
其中记事本右下角的为当前打开文件所使用的编码,当然你也可以将其另存为其它编码,比如上图就是我电脑当前可用的编码。
其它编码后面再提,我们先来看看ANSI
编码是怎么回事。
三、ANSI编码
ANSI
编码,通俗的来说,它是一种本地编码,因为它默认使用的是你计算机所使用的编码。
更官方的说,它是一种扩展的ASCII
编码。
因为它表示英文字母时,依旧使用的一个字节来进行映射,也就是0x00-0x7f
的数值范围。
这里的数值采用的十六进制表示法。
而一旦超出了这个范围,那它就会开始使用后面的0x80-0xffff
开始进行编码了。