乳房太大必要时要缩小_美美生活馆

谷歌中国地图开始支持卫星地图了

08月 28th, 2008 by Skylin

消息来至:China Google Maps API

“Google Maps API开始支持中国地图”以后,谷歌地图( http://ditu.google.cn ) 开始和 Google 地图( http://ditu.google.com ) 一样,开始支持卫星地图了。并在上海北京等大城市支持“交通流量”功能。同样,在此之前,搜狗推出最高分辨率达到了0.5米/像素卫星影像地图。
可以看出,在“关于加强互联网地图和地理信息服务网站监管的意见”出来以后,搜狐和谷歌公司的步伐明显加快,去年愚人节的消息“Google收购Mapabc和腾讯推出卫星软件”已经实现了部分。

Posted in 闲聊 | No Comments »

有道推出国内首个自主研发翻译系统 挑战谷歌

08月 28th, 2008 by Skylin

小道消息,小道消息,这段时间网易旗下的有道搜索推出了一项国内首个自主研发的翻译系统测试版,网址:http://fanyi.yodao.com
我马上就使用了一下这个翻译系统,并且与GOOGLE的翻译系统做了一下简单的比较
比较的文字是”网易科技讯 8月21日消息,网易旗下有道搜索今日推出在线翻译服务测试版,成为国内首家采用自主技术开发机器翻译的搜索引擎厂商。”
有道翻译的结果是”Netease technology (August 21, launched its yodao search today netease online translation service, becomes the first beta independent technological development in machine translation of search engine manufacturers.”
google翻译的结果是”Netease technology - August 21 - Netease search today launched its proper way online translation services in beta, became the first independent technology development using machine translation of [...]

Posted in 闲聊 | No Comments »

WEB开发编码规范

08月 26th, 2008 by Skylin

在上一个公司的时候,公司在技术规范方面比较欠缺,所以要我写一份关于WEB开发的编码规范,下面我就简单的说下。

编码采用如下约定

1) 所有客户端脚本一律使用javascript

2) 所有html一律使用 (table或div) + css

3)在提交表单的同时必须首先使用javascript进行客户端表单数据验证,然后在提交给后台PHP程序进行再一次验证

4)代码必须使用缩进格式,缩进空格必须等于或大于3个

Html规范

一行不能有多于一个的标签存在
Css必须使用单独的样式文件存储
Html文件与css文件各部分需要有注释,解释各部分的含义(注释可以用中文或英文)

4)html注释用例

<!– 某功能 开始 –>
<div>
<p></p>
<p></p>
<p>
<span>Hello</span>
</p>
</div>
<!– 某功能 结束 –>

5)css注释用例
Css命名需要表现出相关含义(英文命名或拼音命名)

/*   某功能 开始   */
* {
font-size:12px;
text-decoration:none;
}
/*   某功能 结束   */

Javascript规范

一行不能有多于一条的语句存在
Javascript函数与相关赋值操作必须使用单独的js文件存储
类,函数与变量命名需要表现出相关含义(英文命名或拼音命名)
Javascript各部分和函数,类必须有注释说明(注释可以使用中文或英文)
Javascript注释用例

/**
* @作者:测试
* @版权:测试
* @类描述:测试
* @参数 obj:某个对象
*/
function User(obj)
{
}
/**
* @作者:测试
* @版权:测试
* [...]

Posted in 闲聊 | No Comments »

一个简单的PDF文件结构的分析

08月 26th, 2008 by Skylin

Adobe的PDF参考告诉我们一个PDF文件可以通过下面4个方面来理解:
1.         对象, 一个PDF文档是由一个由基本数据类型组成的数据结构。
2.         文件(物理结构), 决定对象是如何存放在一个PDF文件中的, 它们是如何被访问的,如何被更新的。这个结构是独立于对象的语义的。
3.         文档结构, 说明一些基本的对象类型是如何来表现PDF文档的成分的:页,字体,批注,和另外一些内容。
4.         内容流.一个PDF文件内容流包含一系列的指令,描述页面的外观或其他图形实体的外观和文件内容。
但是当时对我来说要看懂这几行字是有很大的困难的,需要了解确切含义,必须看完后面的几十页上百页的内容并且要分析一下一个实际的PDF文件才能完全领会它的意思。
后来经过长时间的文档阅读,相关开发,并且具体地分析PDF文件后才把PDF文件的语法,文件的解析搞清楚。虽然说学习是痛并快乐着,但是对于当时我来说 真的希望有一个人能够告诉我一个简单的例子,通过一个简单的例子来描述PDF的基本组成,它的解析原理和过程。因此下面我主要将以一个简单的例子来说明 PDF的主要特性并给出一个简单的PDF文件的全景。
在继续阅读该文章前,我们先问自己下面的几个问题:
l         你了解至少一种文件格式吗?(例如HTML)
l         为什么要学习PDF的相关知识?
如 果你对第一个问题的答案为“是”, 并且第二个问题你能给出一个非常明确的答案,那么这篇短文是适合你的。否则,如果对任何一种格式都不了解,建议先了解 一下HTML,或XML,你可以从这两种语言里得到很多启发,对学习PDF的构成有很大的好处;如果你不清楚你要学习是为了什么,那么我就认为你学习没有 目的性和动力,说不定你今天学了以后明天就忘得一干二净。
1.PDF格式和HTML,XML格式:
一个PDF文档从根本上来说是一个8字节序。其实PDF格式和我们已经熟知的HTML,XML等结构化的文件格式一样,包含有关键字,分隔符,数据等等。
不 同的是PDF文件是按照二进制流的方式保存的,而html文件则是文本方式保存的。XML文件一般只包含数据本身,并没有把如何显示的信息放在其中,因此 要显示一个XML文件还需要一个Schema文件才能显示,否则看到的将是所有的字节流;HTML包含了数据的同时也包含了一些关于如何显示的信息,但是 HTML是基于文本存放的,是可读的,你打开一个HTML文件就能知道所有显示在浏览器里得文字。 另外就是HTML不能包含二进制流,它对图像文件的引 用都是通过链接的,全部是外部文件的方式来实现的。
2.PDF规范的发展
PDF 规范从1993年到现在,已经有过7个版本,六次版本升级,从最初的pdf1.0.6版本到现在的PDF1.6, 每次的版本升级都会加入一些新的特性, PDF参考说明书也是从最初的100多页到现在的1000多页,但是PDF文件格式的主要特性还是没有改变,可以这么理解,PDF1.6是PDF1.0的 扩展集,学习了PDF1.0以后也能基本上理解PDF1.6的内容。 因此说我下面的例子是基于一个PDF1.0的最简单的一个PDF文件的分析。
PDF规范的发展升级:
1.1 1995 加入了文档加密(40字节),线索树,名字树,链接,设备独立色彩资源。
1.2 1996 表单, 半色调屏幕,和其他的一些高级色彩特性, 对中文,日文和韩文的支持
1.3 2000 数字签名, 逻辑结构, JavaScript, 嵌入式文件,Masked Images, 平滑阴影, 支持 CID字体的附加色彩。
1.4 2001 文件加密 (128 字节), 标签式 PDF, 访问控制,透明,元数据流
1.5 2003 文档加密 (公钥), JPEG 2000 压缩, 可选的内容组,附加的注解类型
1.6 2005 文档加密 (AES),增加最大文件支持,加入3D支持,额外的注解类型
3.PDF文件的基本组成:
一个PDF文件从大的方面来说分4个部分:
l         文件头,指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。
l         文件体,PDF文件的主要部分,由一系列对象组成。
l         交叉引用表,为了能对间接对象进行随机存取而设立的一个间接对象的地址索引表。
l         文件尾,声明了交叉引用表的地址,即指明了文件体的根对象(Catalog),从而能够找到PDF文件中各个对象体的位置,达到随机访问。另外还保存了PDF文件的加密等安全信息(以后详细讨论)。
如下图:

图1
4.PDF文档的逻辑结构
作为一种结构化的文件格式,一个PDF文档是由一些称为“对象”的模块组成的。并且每个对象都有数字标号,这样的话可以这些对象就可以北其他的对象所引 用。这些对象不需要按照顺序出现在PDF文档里面,出现的顺序可以是任意的,比如一个PDF文件有3页,第3页可以出现在第一页以前,对象按照顺序出现唯 一的好处就是能够增加文件的可读性,如果你不会用文本编辑器来阅读PDF结构,那么大可不必关心。正是因为页与页之间的不相关性,就可以对PDF文件的页 码进行随机的访问。
文件尾(Trail),说明根对象的对象号,并且说明交叉引用表的位置,通过对交叉引用表 的查询可以目录对象(Catalog)。这个目录对象是该PDF文档的根对象,包含PDF文档的大纲(outline)和页面组对象(pages)引用。 大纲对象是指PDF文件的书签树;页面组对象(pages)包含该文件的页面数,各个页面对象(page)的对象号。
一个PDF文档有下图所示的层次关系:

图2
页 面(page)对象作为PDF中最重要的对象,包含如何显示该页面的信息,例如使用的字体,包含的内容(文字,图片等),页面的大小。当然里面的子项也可 以是其他对象的引用。页面中包含的信息是包含在一个称为流(stream)的对象里,这个流的长度(字节数)必须直接给出或指向另外一个对象。如下图:

图3
5. PDF的基本语法:
文件的第一行是文件头,指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。
一个对象的第一行一般有两个数字和关键字“obj”。例如:
3 0 obj
<<
/Type /Pages
/Count 1
/Kids [4 0 R]
>>
endobj
第一个数字称为对象号,来唯一标识一个对象的,第二个是产生号,是来表明它在被创建后的第几次修改,所有新创建的PDF文件的对象号应该都是0,即第一次被创建以后没有被修改过。上面的例子就说明该对象的对象号是3,而且创建后没有被修改过。
对象的内容应该是包含在<< 和>>之间的,最后以关键字endobj结束.
6.             文件Hello World的文件分析:
6.1.文件的具体分析
%PDF-1.0
文件头,说明符合PDF1.0规范
1 0 obj
<<
/Type /Catalog
/Pages 3 0 R
/Outlines 2 0 R
>>
endobj
Catalog对象(根对象)
2 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
outline对象(此处它的计数为0,说明没有书签)
3 0 obj
<<
/Type /Pages
/Count 1
/Kids [4 0 R]
>>
endobj
pages 对象(页面组对象),/Type /Pages 说明自身的属性,对象的类型为页码,/Count 1说明页码数量为1,/Kids [4 0 R]说明 页的对象为4, 这里要说明的是如果有多个页面,就多个页面直接连续下去,比如说/Kids [4 0 R 10 0 R], 就说明该PDF的第一页的 对象号是4,第二页的对象号是10。
4 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources << /Font << /F1 7 0 R >> /ProcSet 6 0 R >>
/MediaBox [0 0 612 792]
/Contents 5 0 R
>>
endobj
页 对象,/Parent 3 0 R说明其父对象的对象号为3,/Resources << /Font <<  /F1 7 0 R >> /ProcSet 6 0 R >>说明该页所要包含的资源,包括字体和内容的类型, /MediaBox [0 0 612 792]说明页面的显示大小(以象素为单位),/Contents 5 0 R说明页面内容对象的对象号为5。
5 0 obj
<< /Length 44 >>
stream
BT
/F1 24 Tf
100 100 Td (Hello World) Tj
ET
endstream
endobj
<< /Length 44 >>说明stream对象为字节数,从BT开始,ET结束,包括中间的行结束符。
Stream说明一个流对象的开始。
BT说明一个文字对象的开始。
/F1 24 Tf,Tf说明True font对象,字体明为F1, 大小为24个象素。
100 150 Td  (Hello World) Tj,100 100 说明这一行文字放置的位置,对于Td, 我们可以这样理解,我们的当前X,Y坐标分别加上100和 150就是文本的位置,因为在该例子中只有一个对象,那么它的位置就是(100,150), 如果下个对象位置信息为100, 50 Td, 那么它的位 置应该就是(100+100, 150+50)也就是(200,200)。(Hello World) Tj说明文本的内容,当然,如果这里是文本的内容 可以写成16进制,用<>包含。
ET说明文字对象的结束
endstream流对象的结束
6 0 obj
[/PDF /Text]
Endobj
[/PDF /Text]说明PDF的内容类型仅仅为文本,如果有图片则为[/PDF /Image]
7 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
>>
endobj
Object six defines the
字体对象,不再多作解释。
所有的对象之后是下面的交叉引用表:
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000322 00000 n
0000000415 00000 n
0000000445 00000 n
xref说明一个交叉引用表的开始,交叉引用表的第一行0 8 说明下面各行所描述的对象号是从0开始,并且有8个对象。
0000000000 65535 f, 一般每个PDF文件都是以这一行开始交叉应用表的,说明对象0的起始地址为0000000000,产生号(generation number)为 65535,也是最大产生号,不可以再进行更改,而且最后对象的表示是f,表明该对象为free, 这里,大家可以看到,其实这个对象可以看作是文件头。
0000000009 00000 n就是表示对象1,也就是catalog对象了,0000000009是其偏移地址,00000为5位产生号(最大为65535),0表明该对象未被修改过, n表示该对象在使用,区别与自由对象,不可以更改。
下面的几行相信大家就可以告诉我含义了。
Trailer
<<
/Size 8
/Root 1 0 R
>>
startxref
553
%%EOF
trailer
说明文件尾trailer对象的开始。
/Size 8说明该PDF文件的对象数目。
/Root 1 0 R说明根对象的对象号为1。
Startxref
553说明交叉引用表的偏移地址,从而可以找到PDF文档中所有的对象的相对地址,进而访问对象。
%%EOF为文件结束标志。
6.2.PDF解析过程

图4
7.结束语:
到这里,我们对一个最简单的PDF文件的介绍就结束了,我想大家对PDF文件的格式和特定应该已经有所了解了。
当然,我这里介绍的是不完整的,完整的信息,请访问adobe的网站下载:
http://partners.adobe.com/public/developer/pdf/index_reference.html
下次介绍PDF的加密过程及原理。

Posted in 闲聊 | No Comments »

PDF的格式

08月 26th, 2008 by Skylin

PDF全称Portable Document Format,是Adobe公司开发的电子文件格式。这种文件格式与操作系统平台无关,也就是说,PDF文件不管是在Windows,Unix还是在苹果 公司的Mac OS操作系统中都是通用的。这一特点使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式。越来越多的电子图书、产品说明、公司 文告、网络资料、电子邮件开始使用PDF格式文件。PDF格式文件目前已成为数字化信息事实上的一个工业标准。
Adobe公司设计PDF文件格式的目的是为了支持跨平台上的,多媒体集成的信息出版和发布,尤其是提供对网络信息发布的支持。为了达到此目的, PDF具有许多其他电子文档格式无法相比的优点。PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。
PDF 文件使用了工业标准的压缩算法,通常比PostScript文件小,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页”,可以单独处理 各页,特别适合多处理器系统的工作。此外,一个PDF文件还包含文件中所使用的PDF格式版本,以及文件中一些重要结构的定位信息。正是由于 PDF文件的种种优点,它逐渐成为出版业中的新宠。
对普通读者而言,用PDF制作的电子书具有纸版书的质感和阅读效果,可以“逼真地”展现原书的原貌,而显示大小可任意调 节,给读者提供了个性化的阅读方式。由于PDF文件可以不依赖操作系统的语言和字体及显示设备,阅读起来很方便。这些优点使读者能很快适应电子阅读与网上 阅读,无疑有利于计算机与网络在日常生活中的普及。Adobe公司以PDF文件技术为核心,提供了一整套电子和网络出版解决方案,其中包括用于生成和阅读 PDF文件的商业软件Acrobat和用于编辑制作PDF文件的Illustrator等。 Adobe还提供了用于阅读和打印亚洲文字,即中日韩文字所需的字型包。
PDF的阅读
用Adobe公司的Arcobat Reader 7.0软件(该软件免费)即可阅读PDF文件。 更多信息请访问 Adobe 站点。http://www.adobe.com/。
PDF的格式
文件结构可以分为四方面:
1、首部。用文本编辑器打开的时候就可以看到:%PDF-1.4 这样的字眼,其中最后一位就是PDF文件格式版本号,软件的版本号总要比文件格式的版本号高1,比如说Read 5能打开的内容就是4。
2、文件体。里面有若干个的obj来组成,OBJ这种形式:
30979 0 [...]

Posted in 闲聊 | No Comments »

PDF格式研究笔记

08月 26th, 2008 by Skylin

概述
PDF文件依赖于PostScript的图像模型,对文本和图像用设备无关和资源无关的语法进行描述。为了提高交互速度,PDF定义了一些不同于PostScrtpi的格式。PDF支持对象,比如注释和超链接,他们不是页面的组成部分,但是对于交互式显示非常重要。
PDF文件是用一系列编号的对象来建立的。文本,图形和图像等对象用PsostScript语言组织成页面。
但是PDF文件不是一个PostScript语言程序,也不能直接用PostScript解释器来解释。但是PDF文件的页面描述信息是可以转换成PostScript程序的。
坐标系统
PDF的坐标系统定义了一个画布,用来显示你的PDF文档。文本、图形和图像在页面上的位置、方向和大小都是用这个坐标系统来定义的。
PDF支持几种坐标系统,他们大部分和PostScript的坐标系统相同。
后暂略…
对象
PDF支持7种类型的对象,booleans, numbers, strings, names, arrays, dictionaries 和 streams.
boolrans就是true和false。
number,PDF同时两种数字,整数和实数,但是不支持指数格式的实数(科学计数法)。
string和text
string就是用”(”和”)”包括起来的字符串,如果字符串太长可以在行尾加上\,表明下一行和本行是连在一起的。
text一般用PDFDocEncoding或者Unicode来进行编码。PDFDocEncoding是ISOLatin1的一个超集,在0-255的编码上PDFDocEncoding和Unicode是兼容的。
如果text是用Unicode编码的,那么text的前两个字节必须是[FE FF]。[FE FF]代表Unicode的高位字节必须在前。
text还可以包含一个换码序列来标明text使用的语言。换码序列必须用Unicode的16进制值U+001B开头,后面跟随两个由ISO639标准 定义的表示语言的ASCII代码,然后可选择的,跟随两个由ISO3166定义的表示国家的ASCII代码。汉语的语言编号是zh,中国的编号是CN。
name就是一个用/开头的string。
array就是一个对象的序列。一个array可以有多种类型的对象在其中。用”["开头,用"]“结束。下面是一个array的例子:
[0 (Higgs) false 3.14 3 549 /SomeName]
上面的例子也可以作为刚才说过的几种对象的例子。
dictionary是一对对象的对应表。第一个对象叫做key,第二个叫做value。key必须是一个name对象(这点和PostScript里面的dictionay对象的key不同)。value可以是任何的对象,甚至也可以是一个dictionary。
dictionay用”<<”开始,”>>”结束。一般dictionay的例子:
<< /Type /Example /Key2 12 /Key3 (a string) >>
包含dictionay的dictionay的例子:
<<
/Type /AlsoAnExample
/Subtype /Bad
/Reason (unsure)
/Version 0.01
/MyInfo
<<
/Item1 0.4
/Item2 true
/LastItem (not!)
/VeryLastItem (OK)
>>
>>
dictionary对象是PDF文档的主要构成部分。PDF文档的很多部分,比如页面、字体,都是用dictionary来表现的。
stream和string一样就是一个字符的序列。然而应用程序可以读取stream的一个部分,但是读取string就必须读取整个string。所以,尺寸大的数据,比如图像或者页面描述,一般用stream来表现。
一个stream包含一个dictionary,后面是关键字stream,然后是0行或者多行的字符序列,后面是关键字endstream。
所有的stream必须是间接对象。stream的dictionary必须是一个直接对象。关键字stream和stream的dictionary之间必须用回车换行符来分割而不能仅仅用换行符。
stream的格式细节暂略。
null关键字用来表现null对象。
直接对象就是boolean、number、string、name、array、dictionary、stream或者null。一个间接对象就是一 个直接对象加上了一个标签,这样就可以被其他的对象所引用。任何类型的对象都可以被标签为间接对象。间接对象非常有用,比如,你可以把stream的 Length key设定为了一个间接对象,这样长度可以保存在stream后面。这样可以让应用程序用一个流程来生成一个PDF文件。
一个间接对象包括一个对象标识符,一个直接对象和一个endobj关键字。对象标识符包括一个整数的对象编号,一个整数的生成编号,和一个obj关键字。形如:
1 0 obj
(test)
endobj
用在arrary和dictionary元素里面的对象可以是直接对象,也可以是间接对象。间接对象引用包含一个间接对象的对象编号和产生编号,还有一个关键字R。例如:
<< /Length 8 0 R >>
8 0 obj
64
endobj
这里的长度就等于8 0代表的number–64。
注意:引用一个没有定义的对象,不是一个错误,而是相当于引用一个null对象。

Posted in 闲聊 | No Comments »

谈谈Unicode编码(二)

08月 26th, 2008 by Skylin

3、UCS-2、UCS-4、BMP
UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:
UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。
UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根 据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。
group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。
将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。
4、UTF编码
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制)
UTF-8 字节流(二进制)

0000 - 007F
0xxxxxxx

0080 - 07FF
110xxxxx 10xxxxxx

0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
读者可以用记事本测试一下我们的编码是否正确。
UTF-16以16位为单元对UCS进行编码。对于小于0×10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对 于不小于0×10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0×10000,所以就目前而言,可以认 为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
5、UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元 的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那 么这是“奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
在UCS编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符”ZERO WIDTH NO-BREAK SPACE”。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
6、进一步的参考资料
本文主要参考的资料是 “Short overview of [...]

Posted in 闲聊 | No Comments »

谈谈Unicode编码(一)

08月 26th, 2008 by Skylin

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:
问题一:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?
我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?
问题二:
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF- 8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF -16和UCS2有什么关系。
查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。
0、big endian和little endian
big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前 面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符 号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉 字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个 字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按 照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。
这里还有一些细节:
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。
在DBCS中,GB内码的存储格式始终是big endian,即高位在前。
GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128= 16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的 字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。
2、Unicode、UCS和UTF
前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。
Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字 的编码方案。Unicode的学名是”Universal Multiple-Octet Coded Character Set”,简称为UCS。UCS可以看作是”Unicode Character Set”的缩写。
根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。
在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。
目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是10646-3:2003。
UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。
IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述 了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。

Posted in 闲聊 | No Comments »

如何让你的网站为你赚钱

08月 26th, 2008 by Skylin

如何通过在线广告来获取利润呢?
你拥有一个咨讯丰富的网站,有一批固定的访问者,而且希望利用这两个条件来为你赚得一些利润。这就是你考虑网上广告的时候了。
如果你拥有资源(即昂贵的广告服务软件和一个有经验的销售员工),毫无疑问,你就可以自己进行销售广告和管理广告宣传了。如果你喜欢在线经商的话,那就更不需要对此进行很多的投资了。
其中的一个方法就是将你的广告权出售给第三个参与者,比如说广告网络公司,这些广告销售商为网站处理各个方面的广告销售,但是你需要和他们分享利润。
这对每一个参与者来说都是一个双赢的机遇;网主只要将所有的精力放在经营管网站上面就可以了,而广告网络的合作者可以代表网主,通过在网站上面销售横幅广告和文字链接广告,管理和完善广告宣传,以及报告广告的销售情况来赚取外快。而且网站的网主对广告在他网站上面的出现形式有很大的控制管理权。如果你能够自己在自己的网站上面直接销售广告的话,你就可以从中获取更大利益了,但这取决于你网站的运行情况。

大部分的广告网络公司和网主都是平分利润的,而那些能够自己销售广告的人就可以从中获得更多的利润。一些网上所提供的利用在线网络赚钱工具的使用比你想象的中的要简单的多了。

行动步骤

最好的资源和联系方式帮助你实现网站帮你赚钱的梦想

寻找适合的合作者

实际上有无数的网络广告公司可以让你选择,一些比较起其他网站来说更具有专业性和可靠性。在选择合作者的时 候,你首先需要决定你是否对在你自己的网站上面放置的横幅广告和文字链接广告有兴趣。那些广告投放者大部分是根据博客文章的主题或者是信息统计来决定在哪 个网站投放广告,而大部分的付费搜索广告(如搜索引擎广告)都是置放在与其内容相关的地区。因此不需要你再去选择,如果投放在你网站上的广告和你的主题相 关那就是一件再好不过的事情了。大部分的广告网络都没有要求说你只能和他们一家网络公司合作,因此你可以通过两家不同的公司投放你的横幅广告和文字链接广 告。但是需要注意的是不要让你的整个网站都是广告(过多的广告),这样只会使来访者感到厌烦而不再浏览你的网页,与此同时投放在你网络上的广告也就会减 少。

我建议:在投放广告方面,Burst Media 和Tribal Fusion是两个很好的选择。这两个网络广告公司可以让你在线加盟而且有丰富的资源可以让投放者从中赚取利润。

如果你更加倾向于付费搜索广告——由搜索引擎提供和你网络主题相关的广告——试试 Google AdSense。

增加你的网站浏览量

在线广告投放是以该网页的浏览人数和点击数为基础的。因此,为了使你的网站能够帮你获取收益,你的网站需要有 一定的浏览和点击率,这是非常重要的(你要记住大部分的广告网络都需要最小的浏览量才可以投放广告,通常是要求每个月的浏览者要在5.000左右)。你可 以通过写一个有关你网站的新闻稿件(PR)投放在在线的 PR 上面来增加浏览量或者是雇佣一个专门的网络 PR 公司来帮助你写相关的宣传来增加你的网页浏览人数。这样既可以增加你的网页暴光率也可以立即带来大量的浏览者。因为在线PR公司会直接将新闻发布到搜索引 擎中去,同时它还会扩大网站的搜索范围。这就会使你的网站被更多的人知道,使得来访者更方便的发现和访问你的网站。

我建议:你可以雇佣像PRWeb这样的公司,他们为新闻发布提供了several options服务,而该服务的费用从169到619美元不等。这项入门服务是很值得考虑的,因为他包括通过同编辑的电话沟通来检查和增加你的新闻发布量。

更新文章的内容

如果没有好的文章内容的话,那么这个网站就不可能成功的吸引和留住广告投放者。为了吸引住广告投放者(使他们对你的网站进行投资),你要注重创造一个高质量的网站并且不断对其进行更新。这当然也会使那些访问你网站的读者受益,同时也有益于你提高网站的阅读量。

我建议:你可以通过 Nick Usborne这样的在线撰稿公司来提高你的网站内容质量。前任ClickZ 的专栏作家为网站和如何使你现有的网站内容合理化以及网络文章的写作提供很多免费有益的建议。

建议&技巧

帮你充分利用以上方法的建议:

只要你将上面的各个要素都合理的结合起来,实际上任何一个网站都可以赚钱。为了保证广告投放者不会从的网站 上退出或者你网站上 广告产生不好的效益,你需要对你网站上面的广告进行管理,杜绝一切不适合在你网站上投放的广告(这通常可以通过你同你网络的在线的发布公司来完成)。如果 你网站的质量会因赚钱而受到影响的话,在网站上面投放广告就不是一件好事了。

Posted in 闲聊 | No Comments »

利用google监控摄像头

08月 26th, 2008 by Skylin

今天在GOOGLE上搜索流量统计的时候不小心搜出了利用GOOGLE监控摄像头的一个东东,虽然以前我用过这种类型的监控系统来监控国外的一些摄像头,但是没有想到还有这么多可以监控,呵呵,我们只需要在google上搜索inurl:”ViewerFrame?Mode=”就可以搜索出很多地方的网络摄像头了,如果有人比较喜欢偷窥,我想是比较好玩的一个东西。
这些监控摄像头大部分由瑞典Axis Communications和松下电器制造,由于权限的设置不严而导致漏洞的出现。大家茶余饭后笑笑就可以,不要做什么坏事才好

Posted in 闲聊 | No Comments »