- 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"
Bill Lue
2009年2月17日星期二
2009年2月15日星期日
2009年2月11日星期三
关于在Windows下安装OpenCV的问题
2009年1月7日星期三
2009年1月3日星期六
django orm指定字段名,表名
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 ,这里有非常完整的描述,包括一个完整的步骤,英文好的看这里。
参考: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
昨天接到某公司的电话面试,发现很多简单的问题都答不上来,真是无地自容啊。确实在基础知识这方面没有夯实,而且没有及时总结有关知识点,很多概念含糊不清,虽然平时开发没碰到过什么大问题,但是在学习的系统性上是很薄弱的。所以接下来一年应该从基础抓起,而且及时总结知识。
毕业四年了,感觉进步不是很大。总结一个字,“懒”。不能再得过且过了,是时候改变一下了