Bill Lue

2009年2月17日星期二

常见编码后的字符串,以及方便的还原方式

1.%CE%C2%B6%C8%B1%ED:
%后面的字母是十六进制的数,表示字符编码 最简单的方式:在地址栏里输入"http://www.baidu.com/s?wd"后面加上"%CE%C2%B6%C8%B1%ED",也就是"http://www.baidu.com/s?wd=%CE%C2%B6%C8%B1%ED"

2009年2月15日星期日

正则表达式中几个常量

  • I: IGNORECASE 忽略大小写.
  • L: LOCALE 使 \w, \W, \b, \B, 依赖于当前的语言环境.
  • M: MULTILINE $匹配\n之前的位置以及字符串结束前的位置 ^的意义刚好与$相反:字符串的开头或\n的后面.
  • S: DOTALL 使"."匹配任意字符 , 包括换行符.
  • X: VERBOSE 忽略‘模式’字符串中的空格和注释.
  • U: UNICODE 使 \w, \W, \b, \B, 依赖于Unicode环境.

2009年2月11日星期三

关于在Windows下安装OpenCV的问题

看了这个网址http://www.opencv.org.cn/index.php/%E5%9C%A8python%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV, 执行命令说,需要安装compiler, 下载MinGW,再执行命令。 不过原来的两句执行命令似乎应该写成一句: python setup-for-win.py build -c install 还有一点:要找到python安装目录,在python安装目录下的\Lib\site-packages\ 里新建一个文档,保存为Opencv.pth,里面的内容写入OpenCV。

2009年1月7日星期三

django相关小知识点汇总

1关于分页(Paginator)
下面链接有详细且简单的代码
http://www.okpython.com/bbs/thread-2001-1-1.html

2009年1月3日星期六

django orm指定字段名,表名

指定字段名: 在定义字段的时候,增加参数db_column='real_field'; 指定表名: 在model的class中,添加Meta类,在Meta类中指定表名(db_table) 例如在某个models.py文件中,有一个类叫Cat:
class Cat(models.Model):
  name = models.CharField(verbose_name='猫名',  max_length=32, db_column='cat_name')

  class Meta:
    db_table = 'tbl_cat'
    verbose_name = '猫'

在上面这个Cat类里面,name是类变量,而cat_name是表里面的字段名,由db_column指定;而在Meta中有db_table指定的'tbl_cat'则是我们指定的表名。

2008年12月16日星期二

常见字符集(charset)

使用过很多编程语言,但一直没去深入学习如"字符集(charset)","编码"之类的问题,因此也常常因"乱码"、"编码(encode)"、"解码(decode)"这些问题而苦恼不堪。虽然这些问题基本都能在网上找到相应的办法,但是不能从根本上理解怎么回事,实在是不应该。所以还是决定好好补补相关的基础知识。

先来了解一下常见的字符集(charset)

ASCII(RFC 0020)

ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。 还有一篇介绍ASCII,里面的ASCII表更加直观,ASCII Table: 7-bit

还有几篇关于ASCII和中文的,应该看看:

UTF-8(RFC 3629)

Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

UTF-8 and Unicode Standards(官网) RFC 3629
GB2312/GBK/CP936/GB18030

GB2312 是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”, 由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB 是“国标” 二字的汉语拼音缩写。 GB2312 共收录有 7445 个字符,其中简化汉字 6763 个,字母和符号 682 个。在http://www.herongyang.com/gb2312_gb/overview.html介绍的很清楚。

GBK编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。GBK对照表

Cp936和GBK的有些许差别(Cp936是微软制定的,详情请参考微软网站),绝大多数情况下可以把CP936当作GBK的别名。

2000 年的 GB18030 取代了 GBK1.0 的正式国家标准。该标准收录了 27484 个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持 GB18030 ,对嵌入式产品暂不作要求。所以手机、MP3 一般只支持 GB2312。 GB18030 在 Windows 中的代码页是 CP54936

Unicode

每一种语言的不同的编码页,增加了那些需要支持不同语言的软件的复杂度。因而人们制定了一个世界标准,叫做unicode。unicode为每个字符提供 了唯一的特定数值,不论在什么平台上、不论在什么软件中,也不论什么语言。也就是说,它为世界上使用的所有字符都列出来,并给每一个字符一个唯一特定数值。

Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache's),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。

因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符 是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在 UTF-8和ASCII中,“A”的编码都是0x41.

UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说的Unicode就是指UTF-16。在讨论Unicode时,搞清楚哪种编码方式非常重要。

总结:不同字符集有代表的字符,有的根本不同,有些有交叉,有些是兼容的。字符集就是一个编码表,把字符编码成数字,为的就是让我们能看懂的文字、符号变成计算机能看懂的机器码。

2008年12月2日星期二

深入理解Java关键字:native

1.native是什么

native是方法修饰符。native方法是由另外一种语言(如C/C++ ,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在Java代码中,就不需要具体实现了,有点类似于接口方法,只是在类中声明了一个方法。native可以和其他一些修饰符连用,但是abstract方法和interface方法不能用native来修饰。

2.为什么需要native

一般在碰到下面几种情况时,开发者会通过JNI来编写本地方法:

  • 标准Java类库并不支持的依赖于平台的特色或者程序库;
  • 处于性能的考虑,而单纯Java方法实现达不到需求;
  • 为了调用某些现成的类库;

3.如何使用native

如何调用native方法

native方法只是在Java类中做出了声明,如何让代码能调用到具体的实现部分呢?这当然需要调用的人知道这部分实现代码放在那里。在Windows平台下,一般这样的代码会封装在dll(dynamic link library)中;在Unix系的平台中,一般会以so(shared object)的形式存在。所以在调用native方法前,需要我们调用java.system.loadLibrary()方法装载具体的native代码。

如何实现native方法

参考Java Native Interface Programming ,这里有非常完整的描述,包括一个完整的步骤,英文好的看这里。

参考:
  1. Java Native Interface Programming
  2. Java本地接口(Java Native Interface (JNI))
  3. Windows平台,如何将c编译成dll
  4. Java native Method初涉

2008年11月29日星期六

Java中的包名(package)为什么都以小写字母为标准呢?

在Java编程思想(Thinking In Java)的2.6.1名字的可见性中,作者提到:

在Java 1.0和Java 1.1中,域扩展名com,edu,org,net等都约定为大写形式。所以库的样子就变成:COM.bruceeckel.utility.foibles。然而,在Java 1.2的开发过程中,设计者发现这样做会造成一些问题。所以目前的整个软件包都以小写字母为标准” 。

为什么要做这样的改变呢?

可能是为了适应不同的操作系统而做的改变吧。因为Unix系的操作系统是大小写敏感的,所以如果在操作系统中"COM"和"com"两个文件夹被认为是两个不同的文件夹;而在Windows操作系统中,大小写是不敏感的,因此"COM"和"com"两个文件夹为被认为是同一个文件夹。正因为这样,如果有人正好在Unix系的操作系统下写了两个包名为"COM.bruceeckel.utility.foibles"和"com.bruceeckel.utility.foibles"的工具包,迁移到Windows上面来的时候,就会出问题了。这样就好解释Java1.2要把包名统一成小写了。

2008年11月26日星期三

Work hard, study hard

昨天接到某公司的电话面试,发现很多简单的问题都答不上来,真是无地自容啊。确实在基础知识这方面没有夯实,而且没有及时总结有关知识点,很多概念含糊不清,虽然平时开发没碰到过什么大问题,但是在学习的系统性上是很薄弱的。所以接下来一年应该从基础抓起,而且及时总结知识。

毕业四年了,感觉进步不是很大。总结一个字,“懒”。不能再得过且过了,是时候改变一下了

2008年11月20日星期四

Study couchdb

今天听说了Couchdb这个东西,号称是文档数据库,看起来似乎跟现在的关系数据库大不相同啊。有机会一定要好好研究一下。 网站先记录一下:http://incubator.apache.org/couchdb/
 
Sign In