关于编码格式的浅谈【经验】

来源:互联网 发布:淮南seo 编辑:程序博客网 时间:2024/05/16 19:52

由于工作需要,在做开发的过程中用到database数据库。当从db库中读取信息时,发现中文乱码的现象。了解后得知,db库采用的是utf-8的编码格式,而vs2010中我选择了Unicode编码格式。因此,会出现中文乱码的情况。为解决这一问题,我需要将utf-8转为Unicode。而对于编码格式间的区别,我进行了相应的学习。
1. ascii编码
最早指定的ascii编码,一共规定了128个字符编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后7位,最前面的一位统一规定为0。即为,一个ascii字符对应了一个字节所能表示的一个二进制状态。
2.Unicode编码
目前,世界上存在着多种编码方式,同一个二进制数字能够被解释为不同的符号。因此,想要正确的打开一个文本文件,就必须知道它的编码格式,否则会出现乱码。而Unicode,则是一种能够将世界上所有符号纳入其中的编码方式,可以很好的解决乱码的问题。Unicode 是一个巨大的集合,现有规模可以容纳100多万个符号,每个符号的编码都不一样。
需要我们注意的是,Unicode 仅仅只是一个符号集,它只对符号的二进制代码进行了规定,却没有规定这些二进制代码应该如何存储。
比如,汉字“严”的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。而在表示其他更大的符号时,则可能需要3到4个字节,甚至更多。这里就存在两个严重的问题:
(1)如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?
(2)我们知道,英文字母只用一个字节表示就已足够,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节为0。这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。
它们造成的结果是:
(1)出现了 Unicode 的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示 Unicode。
(2)Unicode 在很长一段时间内无法推广,直到互联网的出现。
3.utf-8
UTF-8 为目前互联网中使用最为广泛的一种 Unicode 实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。注意,这里的关系为:UTF-8 是 Unicode 的实现方式之一。UTF-8 最大的一个特点,就是它是一种可变长的编码方式。可用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
总结:某一个确定的字符,对于Unicode和utf-8却具有不同的编码。因此,在某种特定的编码格式下,需要将其他编码统一为一种编码,否则,会出现乱码的现象。

原创粉丝点击