关于unicode不能不知道的知识

在计算机出现的中后期,人们开发了unix,并为无重音英语字母开发了一套称为ASCII的编码,它能够使用32到127之间的数字表示各个字符,空格是32。由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的ASCII字符,而且还有整整一位空余下来。他们想可以把128~255之间的编码用作个人的应用目的。
   然而,亚洲国家的字符表有成千上万个字符,是无法用8位二进制来表示的。这时,unicode就问世了。
   一些人错误的认为,unicode就是一种每个字符占用16个二进制位,从而可以表示65536个可能的字符的16位编码方案。这个并不十分正确,它是关于unicode的唯一最为流行的神话。
   在unicode中,一个字母映射为一种称作代码点(code point)的对象。unicode组织为各种字母表中每个理想化的字母分配一个神奇的编号,其书写形式为U+0645,这个神奇的编号称为一个代码点。U+的含义是“Unicode”,这些数字是16进制的,在windows xp的charmap工具可以找到所有的字母及其编码。
   Unicode能够定义的字母个数其实没有限制。我们来看一个字符串:Hello该字符串在Unicode中对应的5个代码点:
U+0048 U+0065 U+006C U+006C U+006F
   关于Unicode编码,最为容易同时也因此导致2字节神话出现的想法是:“嗨,让我们将这些编码各自用两个字节存放吧!”于是,“Hello”变成了
   00 48 00 65 00 6C 00 6C 00 6F
   曾几何时,这样的做法好像是足够好了。可是,程序员却一直没有停止抱怨:“瞧瞧那些所有的零!”要知道,作为美国人,他们阅读的英语文本很少用到U+00FF以上的代码点。
   于是乎,光彩照人的UTF-8概念就出现了。它是另外一种存放字符串的Unicode代码点的体系,它在内存中使用8位字节存放那些神奇的U+编号。在UTF-8中,从0~127的每个代码点存放在单个字节里面,只是128以上的代码点才使用2个字节、3个字节,乃至多达6个字节的空间来进行存储。这样在UTF-8中,前128个字符与美国人的习惯一样,他们永远不会意识到有什么异样。
   ISO-8859-1,即Latin-1是一种流行的英语文本编码方案。
   请记住:有一个字符串,而不知道它所使用的编码方案是毫无意义的。
                                ---------摘自《joel说软件(joel on software)》

 jsp中访问数据库的时候会显示乱码,可以通过以下办法解决:


将写入数据库的中文转换为从ISO 8859-1编码格式到GBK编码格式,实现方法:
String str = new String(dbstr.getBytes("ISO 8859-1"),"GBK");
读出数据库的中文将其从GBK编码格式转换为ISO 8859-1编码格式,实现:
String str = new String(dbstr.getBytes("GBK"),"ISO 8859-1")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值