2010年8月2日星期一
2010年7月22日星期四
unicode(转)
Unicode
ISO10646/Unicode规定了一套字符集,包含了世界上的大多数字符,规定了这些字符的编码,每个编码可以理解为一个数字。例如:汜,它对应的编码如果用十进制表示,就是27740。
unicode只规定了字符集,只规定了1对应的是什么字符,2对应的是什么字符。至于传输和存储,各个系统必须自己实现。在计算机领域里,一般使用UTF-8,UTF-16,UTF-32三种传输和存储格式。我们也可以说:unicode是定义,而utf-8等是具体实现。
目录[隐藏] |
范围
- Plane 0 (0000–FFFF),这个范围被称为Basic Multilingual Plane (BMP),包含了65536个字符,目前全世界的人类文字和字符都被定义在这个范围里。其中大部分是中日韩字符。
- Plane 1 (10000–1FFFF): Supplementary Multilingual Plane (SMP).
- Plane 2 (20000–2FFFF): Supplementary Ideographic Plane (SIP)
- Planes 3 to 13 (30000–DFFFF) are unassigned
- Plane 14 (E0000–EFFFF): Supplementary Special-purpose Plane (SSP)
- Plane 15 (F0000–FFFFF) reserved for the Private Use Area (PUA)
- Plane 16 (100000–10FFFF), reserved for the Private Use Area (PUA)
BOM
UTF-8
UTF-8是一种兼容ascii的unicode传输存储格式。根据字符编码的范围不同而使用不一样的存储方式和长度。 下面这个表里,字段1表示Unicode编码范围(十六进制),字段2表示编码所使用的存储方式(二进制),或许称为模板更为形象。字段2其实也表示了一个字符在计算机里存储所用的bits。
0000-007F | 0xxxxxxx 0080-07FF | 110xxxxx 10xxxxxx 0800-FFFF | 1110xxxx 10xxxxxx 10xxxxxx 10000-10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
例如字符“汜”,在unicode里的编码为十六进制的6C5C,范围在0800-FFFF之间,所以取模板1110xxxx 10xxxxxx 10xxxxxx(也就是说,“汜”为三字节的宽字符),“汜”的编码换算成二进制(0110110001011100)后代入模板,得1110[0110] 10[110001] 10[011100]。中括号里的数字,连接起来就是该字符的unicode编码的二进制表示。
再例如字符“@”,在uinicode里的编码是十进制的64,范围在0000-007F之间,所以取模板0xxxxxxx。“@”的编码换算成二进制(1000000)后代入模板,得0[1000000]。它在计算机里的存储方式和ascii的“@”是一样的。这就是为什么utf-8是兼容ascii的原因。
UTF-16
UTF-16是一个不兼容ascii的unicode传输存储格式,一个utf-16字符在BMP里总是两字节的,也就是16个bits的。例如字符“@”,它的unicode编码的二进制表示是1000000,在高位补满16个0,得0000000001000000,这就是“@”unicode编码的UTF-16的二进制表示了。因为UTF-16不兼容ascii,而在计算机的世界里存在着大量以ascii方式存储的数据,所以,现在UTF-16并没有在文本处理领域里得到广泛使用。因为UTF-16在BMP总是两个字节,所以比起UTF-8,在存储中日韩字符的时候,相同的文本,需要的存储空间比较少。但是存储英文资料的时候,则比UTF-8需要更多的存储空间。
2010年7月14日星期三
linux基础之教你如何查看linux版本(转)
1. 查看内核版本命令:
1) [root@q1test01 ~]# cat /proc/version
Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005
2) [root@q1test01 ~]# uname -a
3) [root@q1test01 ~]# uname -r
2.6.9-22.ELsmp
2. 查看linux版本:
1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:
[root@3.5.5Biz-46 ~]# [root@q1test01 ~]# lsb_release -a
LSB Version: :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:graphics-3.0-amd64:graphics-3.0-
ia32:graphics-3.0-noarch
Distributor ID: RedHatEnterpriseAS
Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
Release: 4
Codename: NahantUpdate2
注:这个命令适用于所有的linux,包括Redhat、SuSE、Debian等发行版。
2) 登录到linux执行cat /etc/issue,例如如下:
[root@q1test01 ~]# cat /etc/issue
Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
Kernel \r on an \m
3) 登录到linux执行cat /etc/redhat-release ,例如如下:
[root@q1test01 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
注:这种方式下可以直接看到具体的版本号,比如 AS4 Update 1
4)登录到linux执行rpm -q redhat-release ,例如如下:
[root@q1test01 ~]# rpm -q redhat-release
redhat-release-4AS-3
注:这种方式下可看到一个所谓的release号,比如上边的例子是3
这个release号和实际的版本之间存在一定的对应关系,如下:
redhat-release-3AS-1 -> Redhat Enterprise Linux AS 3
redhat-release-3AS-7.4 -> Redhat Enterprise Linux AS 3 Update 4
redhat-release-4AS-2 -> Redhat Enterprise Linux AS 4
redhat-release-4AS-2.4 -> Redhat Enterprise Linux AS 4 Update 1
redhat-release-4AS-3 -> Redhat Enterprise Linux AS 4 Update 2
redhat-release-4AS-4.1 -> Redhat Enterprise Linux AS 4 Update 3
redhat-release-4AS-5.5 -> Redhat Enterprise Linux AS 4 Update 4
另:第3)、4)两种方法只对Redhat Linux有效。
openvpn client 安装
2010年7月12日星期一
ftp 自动脚本 写法之一
1. -n 禁止 .netrc, 不自动登陆
2. ftp 是命令行工具, 因此下边的方式是有效的
#!/bin/bash
# Script to retrieve a file via FTP
FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom
REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<>
open $FTP_SERVER
user anonymous me@linuxbox
cd $FTP_PATH
hash
get $REMOTE_FILE
bye
_EOF_
ls -l $REMOTE_FILE
2010年7月11日星期日
OSI界定的常用开源协议:GPL、LGPL、BSD、MPL、Apache Licence、MIT(转)
转:http://www.ubuntuchina.com/viewthread.php?tid=4762
OSI界定的常用开源协议:GPL、LGPL、BSD、MPL、Apache Licence、MIT
Mozilla Public License(Mozilla Public License version 1.1)
MPLLicense,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件得所有代码得版权都集中在发起开发人得手中。但MPL是允许修改,无偿使用得。MPL软件对链接没有要求。
BSD开源协议(original BSD license、FreeBSD license、Original BSD license New and Simplified BSD licenses )
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
- 需要给代码的用户一份Apache Licence
- 如果你修改了代码,需要再被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
- 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
GPL(GNU General Public License)
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, ApacheLicence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。关于GPL最新的版本第三版请查看:[下载]GNU通用公共授权第三版中文简体(GNU General Public License 3即GNU GPL3)
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品
MIT(MIT)
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.
本文作者:http://www.awflasher.com