PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP基础 >> 基础文章 >> 

web开发人员必须知道的Unicode与字符集相关知识

web开发人员必须知道的Unicode与字符集相关知识

来源:互联网  作者:  发布时间:2010-03-13
原文地址 : http://www.joelonsoftware.com/articles/Unicode.

Unicode

Unicode 是一个勇敢的尝试,它试图用一个字符集涵盖这个星球上的所有书写系统。一些人误以为Unicode只是简单的使用16比特的码字,也就是说每一个字符对应 16比特,总共可以表示65536个字符。这是完全不正确的。不过这是关于Unicode的最普遍的误解,如果你也这样认为,不用感到不好意思。

事实上,Unicode使用一种与之前系统不同的思路来考虑字符,如果你不能理解这种思路,那其他的也就毫无意义了。

到现在为止,我们的做法是把一个字母映射到几个比特,这些比特可以存储在磁盘或者内存中。

A -> 0100 0001

在Unicode中,一个字母被映射到一个叫做码点(code point)的东西,这个码点可以看作一个纯粹的逻辑概念。至于码点(code point)如何在内存或磁盘中存储是另外的一个故事了。

在Unicode中,字母A可看做是一个柏拉图式的理想,仅存在于天堂之中:(我的理解是字母A就是一个抽象,世界上并不存在这样的东西,如果数学里面的0、1、2等一样)

A

这个柏拉图式的AB不同,也与a不同,但与AA相同。这个观点就是Times New Roman字体中的A与Helvetica字体中的A相同,与小写的"a"不同,这个应该不会引起太多的异议。但在一些语言中,如何辨别一个字母会有很大的争议。比如在德语中,字母 ß是看做一个完整的字母,还是看做ss的一种花式写法?如果在一个字母的形状因为它处在一个单词的末尾而略有改变,那还算是那个字母吗?阿拉人说当然算了,但希伯来人却不这么认为。但无论如何,这些问题已经被Unicode委员会的这帮聪明人给解决了,尽管这花了他们十多年的时间,尽管其中涉及多次政治味道很浓的辩论,但至少现在你不用再为这个操心了,因为它已经被解决。

每一个字母系统中的每一个柏拉图式的字母在Unicode中都被分配了一个神奇的数字,比如像U+0639。这个神奇数字就是前面提到过的码点(code point)。U+的意思就是"Unicode",后面跟的数字是十六进制的。U+0639表示的是阿拉伯字母Ain。英文字母A在Unicode中的表示是U+0041。你可以使用Windows 2000/XP自带的字符表功能或者Unicode的官方网站(www.unicode.org)来查找与字母的对应关系。

事实上Unicode可以定义的字符数并没有上限,而且现在已经超过65536了。显然,并不是任何Unicode字符都可以用2个字节来表示了。

举个例子,假设我们现在有一个字符串:

Hello

在Unicode中,对应的码点(code point)如下:

U+0048 U+0065 U+006C U+006C U+006F

瞧,仅仅是一堆码点而已,或者说数字。不过到现在为止,我们还没有说这些码点究竟是如何存储到内存或如何表示在email信息中的。


延伸阅读:
影响ORACLE汉字显示的字符集问题
小谈MySQL字符集
Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别
Google:Unicode(UTF-8)征服ASCII 成互联网最常用编码
讲解MySQL数据库字符集出错的解决方法
ANSI,Unicode,UTF-8网页编码的区别
PHP获取汉字unicode码函数

Tags: web   开发   Unicode   字符集   C   开发人员   字符   code   web开发   知识  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号