问题描述:
一直以来都是用各种语言来写程序,却不知程序底部到底是什么?也经常遇到一些编码,乱码问题,觉得很是杂乱。所以,这次通过查找资料来探究一下编码问题。
ANSIC码:
只要跟机器打交道的都知道机器知道1和0,1表示打开,0表示关闭。科学家们决定用8个开关来代表一个字节,8个开关一共有256种状态,每个状态分别代表了大小写字母,数字,标点符号,空格,这就是ANSIC标准。这样,一个字节就能表示一个基本的符号了,不同字节组合起来,能表示一个单词,句子等来描绘世间万物。
GB2312和GBK,GB18030
后来我国国人也开始使用了计算机了,但是这美国佬的计算机只对自己语言进行的编码,我们博大精深的汉语计算机识别不了啊。但是这难不倒我国人的智慧。我们决定使用大于127的两个字符作为一个中文汉。,数学符号、罗马希腊的字母、日文的假名我们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。
但是我国汉字博大精深,GB2312无法表示所有的汉字,所以,就以就决定第一位大于127,不管后一位是否大于127,来表示汉字。这下你以为汉字够用了。是的,我国还是一个多少数民族的国家,少数民族也得用计算机,于是有进行了扩展,最后形成GB18030、
unicode和utf-8
这下问题来了?
如果每个国家都使用各自的编码,那么,谁也听不懂谁在说什么。这时候一个叫做ISO的组织出现了,规定用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。
但是,又伴随一些新的问题,第一,怎么知道我的是两个字节表示一个符号,还是两个符号。第二,只需要一个字节的,使用两个字节是不是过于浪费。所以。这就是出现了utf-8,它具体来说是unicode一种实现方案,它是可变长编码,它是为传输设计的一种编码方式,每次以8个位传输数据,解决了资源传输的浪费问题。