Other

本文章只对目前主流的五款知识管理类服务(以下简称云笔记)进行数据对比和分析。

名称容量使用量文件限制支持系统
onenote25GB无限制无限制windows、Windows Mobile
evernote无限60M25MMAC、windows、iphone/ipod Touch/iPad、Android、Palm Pre&Pixi、Sony EricssonX、Windows Mobile
麦库500M无限制无限制windows、Android、iphone/ipod Touch
为知10GB100M10Mwindows、iphone/iPad、Android、Windows Mobile
有道笔记1GB无限制无限制windows、iphone

然后我们对使用功能体验进行对比

名称安全功能独有功能
onenote本地密码与office集成
evernote可新建手写与摄像笔记,手机版可录音
麦库本地密码
为知证书加密朗读、日历、日记功能
有道笔记白板

然后我们再对粘贴内容进行对比

名称表格网页图片本地文档
onenote√可编辑
evernote√可编辑
麦库√图片形式
为知√可编辑
有道笔记√可编辑

分析:

由以上三个对比表的比较,可分析得:

如果你比较在意安全性,可以选择:onenote、麦库、为知

如果你喜欢记日记,可以选择:为知

如果你喜欢手写或摄像记事,可以选择:evernote

如果你平时要保存表格并编辑,可以选择:onenote、evernote、为知、有道笔记

如果你要使用到会议白板记录功能,可以选择:有道笔记

总体来说,个人用户推荐为知,因为有记日记和朗读功能;上班族推荐onenote,因为和office2010集成;如果你是会议记录者推荐有道笔记或evernote,因为有道笔记有白板功能,evernote有录音功能;如果你是简洁控,那就用有道笔记吧;如果你想用evernote,可又怕被墙,就用麦库吧。

Balsamiq Mockups完全手册

[不指定 2011/11/07 14:30 | by ipaddr ]

http://www.hanjunxing.com/balsamiq-mockups-one-for-all

Balsamiq Mockups出自加利福尼亚州的Balsamiq工作室,创始人Peldi在2008年6月推出了这款手绘风格的产品原型设计工具,并广受好评。2年多来,Balsamiq工作作为一个微型独立软件开发商,专注于Mockups的开发设计,仅3周便实现了盈利,18个月内销售额达到200万美元,用户端数量超过10万个,这与Balsamiq Mockups的市场用户细分的成功以及产品特性是分不开的。

世界上最神奇的数字: 142857

[不指定 2009/05/14 10:25 | by ipaddr ]
  看似平凡的数字,为什么说他最神奇呢?

  我们把它从1乘到6看看

  142857 X 1 = 142857
  142857 X 2 = 285714
  142857 X 3 = 428571
  142857 X 4 = 571428
  142857 X 5 = 714285
  142857 X 6 = 857142

  同样的数字,只是调换了位置,反复的出现。

  那么把它乘与7是多少呢?

  我们会惊人的发现是 999999

  而

  142 + 857 = 999
  14 + 28 + 57 = 99

  最后,我们用 142857 乘与 142857

  答案是:20408122449 前五位+上后五位的得数是多少呢?
  20408 + 122449 = 142857

  关于其中神奇的解答

  “142857”

  它发现于埃及金字塔内, 它是一组神奇数字, 它证明一星期有7天,它自我累加一次,就由它的6个数字,依顺序轮值一次,到了第7天,它们就放假,由999999去代班,数字越加越大,每超过一星期轮回,每个数字需要分身一次,你不需要计算机,只要知道它的分身方法,就可以知道继续累加的答案,它还有更神奇的地方等待你去发掘! 也许,它就是宇宙的密码┅┅

  142857×1=142857(原数字)
  142857×2=285714(轮值)
  142857×3=428571(轮值)
  142857×4=571428(轮值)
  142857×5=714285(轮值)
  142857×6=857142(轮值)
  142857×7=999999(放假由9代班)
  142857×8=1142856(7分身,即分为头一个数字1与尾数6,数列内少了7)
  142857×9=1285713(4分身)
  142857×10=1428570(1分身)
  142857×11=1571427(8分身)
  142857×12=1714284(5分身)
  142857×13=1857141(2分身)
  142857×14=1999998(9也需要分身变大)

  继续算下去……

  以上各数的单数和都是“9”。有可能藏着一个大秘密。

  以上面的金字塔神秘数字举例:1+4+2+8+5+7=27=2+7=9;您瞧瞧,它们的单数和竟然都是“9”。依此类推,上面各个神秘数,它们的单数和都是“9”;怪也不怪!(它的双数和27还是3的三次方)无数巧合中必有概率,无数吻合中必有规律。何谓规律?大自然规定的纪律!科学就是总结事实,从中找出规律。

  任意取一个数字,例如取48965,将这个数字的各个数字进行求和,结果为4+8+9+6+5=32,再将结果求和,得3+2=5。我将这种求和的方法称为求一个数字的众数和。

   所有数字都有以下规律:

  [1]众数和为9的数字与任意数相乘,其结果的众数和都为9。例如306的众数和为9,而306*22=6732,数字6732的众数和也为9(6+7+3+2=18,1+8=9)。

   [2]众数和为1的数字与任意数相乘,其结果的众数与被乘数的众数和相等。例如13的众数和为4,325的众数和为1,而325*13=4225,数字4225的众数和也为4(4+2+2+5=13,1+3=4)。

  [3]总结得出一个普遍的规律,如果A*B=C,则众数和为A的数字与众数和为B的数字相乘,其结果的众数和亦与C的众数和相等。例如 3*4=12。取一个众数和为3的数字,如201,再取一个众数和为4的数字,如112,两数相乘,结果为201*112=22512,22512的众数和为3(2+2+5+1+2=12,1+2=3),可见3*4=12,数字12的众数和亦为3。

   [4]另外,数字相加亦遵守此规律。例如3+4=7。求数字201和112的和,结果为313,求313的众数和,得数字7(3+1+3=7),刚好3与4相加的结果亦为7。

  令人奇怪的是,中国古人早就知道此数学规律。我们看看“河图”与“洛书”数字图就知道了。以下是“洛书”数字图。

  4 9 2
  3 5 7
  8 1 6 ( 洛书)

  世人都知道,“洛书”数字图之所以出名,是因为它是世界上最早的幻方图,它的特点是任意一组数字进行相加,其结果都为15。其实用数字众数和的规律去分析此图,就会发现,任意一组数字的随机组合互相相乘,其结果的众数和都为9,例如第一排数字的一个随机组合数字为924,第二行的一个随机组合数字为 159,两者相乘,其结果为146916,求其众数和,得1+4+6+9+1+6=27,2+7=9,可见,结果的众数和都为9。

  这种巧合不能说明什么问题,让我们再看看“河图”数字图。

  7
   2
  8 3 5 4 9
  1
   6 (河图)

  “河图”的数字图没有“洛书”数字图出名,这是因为人们未能动发现其数学规律,但是用众数和的规律去分析它,就能发现它的奇妙之处。

  “河图”数字图中,任意一组数字互相进行相乘,其结果的众数和都为6。例如27165*38495=1045716675,求结果的众数和,1+4+5+7+1+6+6+7+5=42,4+2=6,可见,结果的众数和为6。

  由此可见,“河图”的数字图亦不可能是随意摆设,否则,其结果的众数和不可能都为6。从上述两个数字图可知,古人十分重视数字6与数字9。无独有偶,太极图的就由数字6与数字9组合而成。

  太极图的左边部分为数字6,太极图的右边部分为数字9。

   “太极图”﹑“河图”﹑“洛书”通过种种手段暗示数字6与数字9的重要性,其中“河图”与“洛书”更是在熟悉数字众数和规律的前提下编制而成。但是,据我们所知,数字众数和的规律刚刚被本人发现,同时也没有任何证据显示古人已经知道这数学规律。

[转]老程序员的10个忠告

[不指定 2009/02/03 17:32 | by ipaddr ]
    [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手! 
  
    [2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!   
 
    [3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,一律如此!
 
    [4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低! 

    [5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!  

    [6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!

    [7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,教条式思维等,这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好——尽管你可能技术不错!

    [8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!

    [9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...

    [10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!

打开《资源管理器》,在《我的设备》中复制pim文件,备份到SD卡或者电脑上。恢复时将《我的设备》中pim文件先重命名随便增加或减少一个字母(不然无法将同名的pim备份文件替换现有的pim文件),再将备份的pim文件粘贴后,重启后即恢复备份时原有的联系人。随后再在《我的设备》中将恢复前重命名的原pim文件删除。

优点:在系统硬启清空后及时恢复联系人,免除非要系统整体备份或电脑outlook同步来恢复联系人的麻烦,还可将同一系统的联系人相互复制。


联系人备份导出软件Contact2CSV(绿色)!支持PPC2003,WM5,WM6
软件简介:

导出手机中的联系人,信息字段包含:
姓名、移动电话、公司名称、办公电话、家庭电话、电子邮件

浏览时,拖动即可查看上下翻看。

导出的联系人信息保存于手机根目录下的:contacts_backup.csv.txt文件。
保存格式为CSV形式的文本文件,方便查看及修改。(日后增加导入恢复至手机功能时,会很方便哟,在电脑里修改好文本文件,然后导入即可)

最近应聘系统架构师,面试回答一些问题,加上之前做的一些功课,搜索到一些文章,感觉有必要总结一下,到底如何做一个成功的系统架构师呢?
首先,何谓系统架构师?
IBM工程师的说明是:
  架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应,以确保成功
中文Wiki上的说明是:
  系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单
这两个解释,加起来基本说明了系统架构师的定义。

JAVA系统架构师应该看的几本书
Thinking in Java
Effective Java
UML基础、案例与应用
UML入门提高
软件工匠
设计模式——可复用面向对象软件的基础
重构-改善既有代码的设计
敏捷软件开发-原则、模式、实践
企业应用架构模式
Expert One-on-One J2EE Development without EJB

软件工程——实践者的研究方法
软件领导--成功开发软件的指导准则
后面的两本书,其实已经有点属于项目经理的范畴了,不过还不是很深入,看看对做成功的系统架构师是很有好处。
企业应用的系统架构师应该关注的几个方面
数据持久层的设计
在Spring和Hibernate,ibatis出来以前,几乎每家公司都有自己的一套方法和架构,而架构师的50%的精力也会集中到这上面,EJB只是增加架构师的负担。在Spring出来以后,基本上,大多数的架构师都从重复设计这个轮子的无用功中解脱出来了。 Rod的轮子太好用了,基本上,大家只要套上去就行了,或者,剩下最重要的事情,是选择一个合适的数据库连接池的开源项目吧
MVC架构的具体设计
MVC只是个概要的概念,具体如何实现的具体技术很多,根据项目设计最恰当的架构
大并发性访问
使用缓存,在数据量达到一定程度时,使用集群技术,优先考虑利用服务器的集群,其次是硬件集群,最后才是应用本身加入集群功能
超大数据量返回结果
尽量使用分页,优化SQL语句,循环处理数据时尽可能共用对象,只保留关键数据,及时释放内存占用
超大文件的读取和生成
尽可能快的读取大文件,并进行分析。写入大文件时,如何及时释放内存。学会适当利用操作系统的命令行资源来更快完成任务。

多线程的应用和管理
线程池的管理和监控,线程的启动(包括定时启动),结束,回收,线程资源的释放

用户界面可用性设计
平衡速度和可用性,恰当的使用异步和同步技术,展现关键数据为重点
分布式的数据交流和集成
选择恰当的数据交互方式,从最泛滥低效的Web Service到最实用的文件共享
群集系统的管理
如何确保缓存的同步?如何确保对象唯一性?如何保证各台机器的同步?
是否采用EJB?如何利用J2EE的特性(例如JNDI)
复杂的业务规则
规则引擎和工作流引擎场景和应用

其实,作为一个真正的系统架构师,不应该局限于企业应用的系统,这种系统往往有数据库的局限性,有时候,应该考虑是否可以横向跨越,直接对其它系统做一些架构考虑,在没有丰富的实战经验的前提下,而只是看了其它人的系统和代码,就能够给出有效的设计指导。
例如对于一个下载软件,可以有如下考虑:
1. 未明和非法url的检验,已经下载失败的容许,信息记录
2. 多线程下载一个文件,文件的切分和拼合,部分切片丢失的拼合可能性
3. 下载线程管理
4. 服务器或者P2P的机器之间的通讯协议
5. 速度监控和限制
6. 下载进度的监控和显示
作为一个在线播放软件,可以做如下考虑
1. 播放速度的保证
   机器的问题基本不存在了,关键是网络问题。如何在检测网络速度,根据影片的质量,并缓冲足够多的内容,保证播放一直尽可能顺利的完成。
2. 播放质量的保证
   如何利用DirectX等技术,最快的进行渲染,是自己写底层,还是利用已有的API
由于没做过类似的项目,可以写的东西还是少很多了。
系统架构师应该有的素质:
1、 实际的编程经验
  最少2年吧,多了就不说了,其实从大学就开始钻研的话,
2、 书面表达能力和口头交流能力
   综合利用架构图,UML图,文字和代码片断,表达自己设计思想,至于是Word还是ppt,应该通吃
  在开发人员中发现架构师的最有价值标准是有效的沟通。您需要技术娴熟、经验丰富的开发人员,这样的人员需要有就项目中的业务相关问题进行沟通的经历。架构师经常必须对理解方面的差距进行预计,然后才能有所贡献。他们必须愿意克服困难来确保技术和业务观点的融合。他们并不必对意见交换工作进行计划和协调;这仍然主要是项目经理的工作。他们的任务是确定表述系统设计时的最佳工具和构件,以促进有效的意见交换。他们必须能够判断当前方法显得不足而需要采用新方法的情况。写作技能也非常重要,还需要具有制作草图的技能或使用制图软件的能力。
3、 自觉主动;积极解决设计问题
  架构师的日常工作目标经常并不明确。很多开发人员直接参考功能规范来列出任务清单。架构师通常则是向这些开发人员提供所需结构的人员,以便尽可能提高工作效率。好的候选者不仅进行沟通方面的工作,而且也会预计各种设计问题并加以解决——通常在没有任何具体指示的情况下自觉进行。无论所分配的职责如何,积极参与项目的开发人员都有机会从一起工作的人员中脱颖而出。
4、 抽象思维能力和总结能力
  架构师,顾名思义,在系统未搭建好之前,就要能够有一个草图在心。而如果是对现有系统的改造,那么能在看过系统的文档(如果有的话)和代码后,就能总结出系统的架构特点。
  架构师必须能够理解表述模糊的概念并将其变成相关各方能够理解的项目构件。他们必须能够理解抽象概念,并以具体的语言对其进行沟通。开发人员中好的候选者经常要求或自己主动解释开发生命周期中容易混淆的问题。他们能迅速评估各种想法并将其纳入后续工作的操作建议中。
  开发人员经常具有很强的数学能力,而好的架构师则倾向于表现出更强的口头表达能力。管理人员经常说开发人员具有“工程意识”,而这是一个用于评估架构师的非常有意义的方面。架构师应该具有很强的解决技术问题的能力,但还必须能够准确获知更为全面的人员如何与技术交互的信息。这要求具有某种形式的抽象思维(而不再是代码的细节),这种思维能力可能较难形成。
5、 全面的技术资讯吸收能力和选择鉴别能力
  作为开发人员出身,对于某一个具体问题的研究能力(虽然很多人总结为google能力),已经相当具备了。但是对技术资讯的全面接受和选择性深入了解能力,并且做出正确的判断,那些技术无非是厂家的噱头,而那些技术是真正可以用到项目,提高项目质量的好技术,这种能力确实至关重要的。

[软件推荐]MindManager

[不指定 2008/05/04 14:07 | by ipaddr ]
MindManager是一个创造、管理和交流思想的通用标准,其可视化的绘图软件有着直观、友好的用户界面和丰富的功能,这将帮助您有序地组织您的思维、资源和项目进程.
MindManager也是一个易于使用的项目管理软件,能很好提高项目组的工作效率和小组成员之间的协作性.它作为一个组织资源和管理项目的方法,可从脑图的核心分枝派生出各种关联的想法和信息.
MindManager可以使讨论和计划的过程从根本上发生变化,促进实现你的思想和方案.

MindManager可以使讨论和计划的过程从根本上发生变化,促进实现你的思想和方案.

在一般的传统的讨论中至少包含四个步骤:
1、从图表或白板上获得思想
2、转录成为很难阅读的电子版
3、在组织信息资料的过程中不可避免的要损失某些思想的重要关系
4、通过印刷品或者电子邮件分发资料

时间和资源在重复的信息中被浪费了,同事们很难理解会议的结果.
但是,MindManager软件改变了研讨过程,只通过以下两个步骤就可以在同一页中显示出每个人的观点,从而避免了不必要的重复性的工作.

1、迅速的以可视化形式获取和组织思想,促进团队内的协作和个体积极性.
2、能够直接分发会议记录,比以往更快的落实各种设想.

点击“输出”(export),可以得到PDF、Word、Powerpoint、HTML和图片格式文件.
通过两天来的试用,立马喜欢上了这个软件,让人爱不释手.

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打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上一切规范的基础。

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进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为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 ISO-IEC 10646 and Unicode" (http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html)。

我还找了两篇看上去不错的资料,不过因为我开始的疑问都找到了答案,所以就没有看

如何识别文件类型

[不指定 2006/07/31 12:22 | by ipaddr ]
如何识别文件类型

朋友接到一封商业邮件,附件的后缀为dat,很明显,这不是VCD视频文件,不知如何打开.让我帮忙打开,我尝试着用

Editplus,UltraEdit打开,查看文件头,一般情况下,如果是JPG,GIF,RAR之类的文件,在文件头可以看出来的,但这个

文件,从文件头看不出来是什么文件.
接着,尝试改成rar,jpg之类的后缀,还是不行,纳闷了,
最后用Editplus打开时,在最后面看到Microsoft几个字眼,我猜想是Word文档,改成doc后缀后,果然能打开.
发邮件的人还真有点变态,将WORD文档,改成DAT后缀,这一般的人,还真打不开.

之后,尝试用Linux的file命令,也可以将文件的类型正确的识别.Windows下安装Cygwin,Linux下直接执行:

file ipaddr.file.name

就可查看该文档的类型了.
有很多朋友可能安装了Office 2003,但是有很多PPT文件打不开,换了Power Point XP或者2000就能打开。一般碰到这样的问题,你可以到这儿下载安装补丁http://support.microsoft.com/kb/828041。

概要
Microsoft 发布了一个 Microsoft Office 2003 更新。此更新可以修复在尝试打开或保存一个包含以前在旧版本的 Microsoft Office 中修改和保存的 OfficeArt 图形的 Microsoft Office PowerPoint 2003 文件、Microsoft Office Word 2003 文件或 Microsoft Office Excel 2003 文件时出现的问题。在旧版本 Office 中打开 PowerPoint 2003 文件、Word 2003 文件或 Excel 2003 文件时,可能会向文件中引入空的“复杂”属性,并且可能会在描述这些属性的文件记录中更改一个位。旧版本的 Office 将忽略这个位值,但是,在 Office 2003 中检测到该值后,您可能会遇到下面的症状:
• 文档无法完全打开。
• 文档可能已经损坏。
• 文档能够打开,但缺少内容。
• 您可能会收到错误信息。
请安装补丁

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]