Unicode 与 UTF-8, GBK

November 24th, 2006 No comments

原本是为了回复[python-chinese]邮件列表中的一个关于socket上传输unicode的问题,写得比较长,觉得应该记下来:

我想这里有几个概念要澄清~ 这样才能有比较好的交流的基础,而不是说同一个名字,却各自指的不是同一个东西。我也只是班门弄斧,希望大家指正。

unicode是一个字符集,不是一种编码,她只是定义了一个字符空间,把字符集中的字符映射到了相应的整数上,并为每一个字符提供了唯一的名字,比如,'中' U+4E2D。但unicode并没有定义编码方式(codec),也就是从字符集到字节序列的映射方式。有专门为unicode定义的编码方式,比如utf-8,utf-16(be/le),他们定义了unicode字符到字节序列的映射,也就是编码。utf-16简单的用16bit两个字节来编码(encode)unicode,utf-8用1倒3个或者更多的字节编码(encode)一个unicode字符。这些codec同时也定义了如何从一个字节序列中decode出unicode字符序列的方式。所以,unicode是一个抽象的字符概念,并不是一个字节流,她到字节流的映射靠codec来完成。python中,用unicode对象来表示抽象的unicode字符,我觉得到这个程度就可以了,不必关心其中是不是靠整数来表示的。关键是string对象就是字节流,python的unicode对象不同于string对象,抽象的unicode对象到字节流的string对象之间需要靠codec来转换。(在py3k中可能要统一unicode和string对象,再议)
而gbk也是一个字符集,但同时他也定义了gbk这种codec(一种mbcs的codec),它定义了一个gbk字符(英文或者中文)到字节序列(一个或者两个字节)的映射。因为unicode的集合比gbk大,使gbk的超集,所以,可以把gbk编码的字节流转换成unicode字符序列,也可以把一部分的unicode字符(gbk子集的部分)编码为gbk的字节序列。所以,gbk也可以作为unicode的一种codec来用。 Read more…

Categories: Python Tags: ,

用p4命令行作打包修改中的changelist

November 8th, 2006 No comments

发现这种heavy GUI的工具,非常不灵活,非常难用,能做什么都是定好的,想要做点没有预订好的事情根本就是不可能的。Perforce就是,非常怀念cvs/svn。
想要把一个正在修改的changelist给同事,发现p4的GUI根本不能做patch,命令行好像也不行。想想,做出个diff格式的patch,同事也未必能用(windows世界…)。于是,饶了个大弯路,写了个长命令,用于打包本地changelist的文件:
p4 change -o  14563 | grep --color="never" -o "//depot/[^ ]*"  | cut -c 40- | xargs tar rvf patch.tar


最后之所以用tar rvf而不是jcvf,是怕xargs接到的文件列表太长,分几次传给tar。最后的tar,你要bzip2还是gzip就随意了。

Categories: Linux Tags: ,

安装本地的firefox theme

October 16th, 2006 No comments

一般firefox的extension都是打包成xpi文件的,本地的xpi文件直接用firefox打开就行了。可是firefox的theme却是打包成标准的jar文件的,直接打开本地的jar就不行了。简单的放在一个html文件的a标签内也不行,就变成下载了。
theme的安装需要一段javascript代码,这段代码可以直接从mozilla的add-on下载站引用就行了。以本地的TangoFF_2_0.jar为例,可以这么做,写一个简单的html文件,也不必求完整:

<head>
<script src="http://addons.mozine.org/js/install.js" type="text/javascript"></script>
</head>

<a href="./TangoFF_2_0.jar"
   onclick="return installTheme(event,'TangoFF 2.0', 'images/default.png');" >
 Install Theme Tango for Firefox 2.0
</a>


然后用Firefox打开,点机连接就可以了~

Categories: Linux Tags:

夜宴?晚饭。

September 21st, 2006 No comments

自从张艺谋的英雄开了中国“武侠大片”的先河以后,还真是一部不如一部。这次夜宴又一次让我们感受到了“大片”对于“烂”的创造力是超出我们的想象的。比无极的馒头更厉害的是,这次夜宴还没上映,就有人早早的作了一部恶搞video热身了。而我到现在才知道这个”晚饭”,也算是后知后觉了。赶紧传到YouTube上恶补一下。PS:这还是我第一次往YouTube上传video呢:

Categories: Movie Tags:

udev的static device node

August 31st, 2006 No comments

这两天帮QA的同事安装nistnet,使用中发现,每次reboot以后,都会丢失/dev下所需的设备节点,包括/dev/nistnet,/dev/hitbox等。后来我想到ubuntu使用udev来动态建立设备节点,应该是reboot的时候,udev没能正确的重新建立这些节点。于是,需要udev建立这些静态的设备节点。

google了一下,在LFS中找到了方法。udev的init script会把/lib/udev/devices/下预建立的静态device nodes拷贝到/dev下面。所以,只要把需要的static device node预先mknod到/lib/udev/devices下面就行了。

Categories: Linux Tags: ,