??xml version="1.0" encoding="utf-8" standalone="yes"?> 下图展示了一个极端的反例Q虽然很有个性,但ƈ不适合用来昄代码。它的大写字母大的可怕,写字母却小的可怜;字符不仅不清晎ͼ而且不规范;写字母l、大写字母I、数?和符号| 难以分LQ大写字母O和数?难以分LQ标点符可凑合Q只是下划线Z么是断开的? 当然Q这个反例的有些夸张,但其上文所列D的条件是比较苛刻的,我们在选择字体时没有必要非要完全满x有条Ӟ事实上这U字体也是凤毛麟角。下文所分n的一些字体也q没有完全满x有条Ӟ我们发现Q只要满了其中一些关键条Ӟ用来昄代码已l很不错了?/p>
在Visual Studio中,更改~辑器的字体是g单的事情Q选择菜单?strong>工具】?strong>选项】,在弹出的“选项”对话框中依次选择“环境”?#8220;字体和颜?/strong>”Q然后在“昄其设|?/strong>”中选择“文本~辑?/strong>”Q最后在“字体”中选择字体可以了Q如下图所C: 在上图中Q我们发现Visual Studio已经等宽字体用_体标识了出来,q样做是Z让我们更Ҏ扑ֈ{宽的字体,q不表示{宽字体׃定适合昄代码Q比如下图所C的“新宋?#8221;是一个反例: 在新宋体中,数字0之比大写字母O瘦那么一点点Q小写字母l和数?也十分相像,q怺配色Ҏ能够颜色它们区别开来,否则实在难以分L。这也从另一个角度说明了配色Ҏ与字体是相辅相成的,搭配恰当Ӟ会让代码更加清晰易L?/p>
下面和大家分n一些在~程界声名烜赫的字体Q截图所采用的配色方案ؓHumaneStudioQ展C顺序ؓ字体首字母升序。这些字体可能乍一看都一P但仔l品呻Iq是能够发现不同的味道,希望大家都能扑ֈ适合自己的字体?/p>
Andale MonoQ演C字号ؓ14Q?a >猛击q里下蝲Q?/p>
Anonymous ProQ演C字号ؓ14Q?a >猛击q里下蝲Q?/p>
Bitstream Vera Sans MonoQ演C字号ؓ14Q?a >猛击q里下蝲Q?/p>
ConsolasQ演C字号ؓ14QWindows或Visual Studio已内|: Courier NewQ演C字号ؓ14QWindows已内|: DejaVu Sans MonoQ演C字号ؓ14Q?a >猛击q里下蝲Q?/p>
Envy Code RQ演C字号ؓ16Q?a >猛击q里下蝲Q?/p>
InconsolataQ演C字号ؓ16Q?a >猛击q里下蝲Q?/p>
MonacoQ演C字号ؓ12Q?a >猛击q里下蝲Q?/p>
MonofurQ演C字号ؓ16Q?a >猛击q里下蝲Q?/p>
ProgmataQ演C字号ؓ14Q?a >猛击q里下蝲Q?/p>
Share TechMonoQ演C字号ؓ16Q?a >猛击q里下蝲Q?/p>
注:此字体似乎会连在一Lfl昄Z个点Q不使用Q可惜可惜?/p>
注Q?/p>
附: alphal 内部试? Unicode 是一个系l,用来表示世界上所有不同语a的字W。当 Python 解析一?XML 文档Ӟ所有的数据都是以unicode的Ş式保存在内存中的?/p>
一会儿你就会了解,但首先,先看一些背景知识?/p>
历史注解. ?unicode 之前Q对于每一U语a都存在独立的字符~码pȝQ每个系l都使用相同的数?0-255)来表CU语a的字W。一些语a (像俄? 对于如何表示相同的字W还有几U有冲突的标准;另一些语a (像日? 拥有太多的字W,需要多个字W集。在pȝ之间q行文档交流是困隄Q因为对于一台计机来说Q没有方法可以识别出文档的作者用了哪种~码模式Q计机?到的只是数字Qƈ且这些数字可以表CZ同的东西。接着考虑到试囑ְq些 (采用不同~码? 文档存放到同一个地?(比如在同一个数据库表中)Q你需要在每段文本的旁边保存字W的~码Qƈ且确保在传递文本的同时编码也q行传递。接着考虑多语a文档Q即在同一文档中 用了不同语言的字W?比较有代表性的是用{义符来进行模式切换;噗,我们处于俄语 koi8-r 模式Q所以字W?241 表示q个Q噗Q现在我们处?Mac 希腊语模式,所以字W?241 表示其它什么。等{? q些是 unicode 被设计出来要解决的问题?/p>
Z解决q些问题Qunicode 用一?2 字节数字表示每个字符Q从 0 ?65535?sup>[8] 每个 2 字节数字表示臛_在一U世界语a中用的一个唯一字符?在多U语a中都使用的字W具有相同的数字码? q样q保每个字W一个数字,q且每个数字一个字W。Unicode 数据永远不会模棱两可?/p>
当然Q仍然还存在着所有那些遗留的~码pȝ的情c例如,7 ?ASCIIQ它可以英文字W存ؓ?0 ?127 的数倹{?65 是大写字?“A”Q?7 是小写字?“a”Q等{? p有着非常单的字母表,所以它可以完全?7 ?ASCII 来表C。像法语、西班牙语和徯之类的西Ƨ语a都用叫?ISO-8859-1 的编码系l?(也叫?#8220;latin-1”)Q它使用 7 ?ASCII 字符表示?0 ?127 的数字,但接着扩展C 128-255 的范围来表示?n 上带有一个L线(241)Q和 u 上带有两个点(252)的字W。Unicode ?0 ?127 上用了?7 ?ASCII 码一L字符表,?128 ?255上同 ISO-8859-1 一P接着使用剩余的数字,256 ?65535Q扩展到表示其它语言的字W?/p>
?处理 unicode 数据Ӟ在某些地方你可能需要将数据转换回这些遗留编码系l之一。例如,Z同其它一些计机pȝ集成Q这些系l期望它的数据用一U特定的单字节编码模 式,或将数据打印输出C个不识别 unicode 的终端或打印机。或数据保存到一个明指定编码模式的 XML 文档中?/p>
在了解这个注解之后,让我们回?Python上来?/p>
?2.0 版开始,Python 整个语言都已l支?unicode?span class=acronym>XML 包?unicode 来保存所有解析了?XML 数据Q而且你可以在M地方使用 unicode?/p>
q记得我说过Q需要从一?unicode 得到一个正常字W串ӞPython 通常默认?unicode 转换?ASCII 吗?嗯,q个默认~码模式是一个可以定制的选项?/p>
如果你打在你的 Python 代码中保存非 ASCII 字符Ԍ你需要在每个文g的顶端加入编码声明来指定每个 .py 文g的编码。这个声明定义了 .py 文g的编码ؓ UTF-8Q?/p>
现在Q想?XML 中的~码应该是怎样的呢Q不错,每一?XML 文档都有指定的编码。重复一下,ISO-8859-1 是西Ƨ语a存放数据的流行编码方式。KOI8-R 是俄语流行的~码方式。编码――如果指定了的话――都?XML 文档的首部?/p>
ȝ一下,如果你以前从没有看到q?unicodeQ倒是有些唬hQ但是在 Python 处理 unicode 数据真是非常Ҏ。如果你?XML 文档都是 7 位的 ASCII (像本章中的例?Q你差不多永q都不用考虑 unicode?span class=application>Python 在进行解析时会将 XML 文档中的 ASCII 数据转换?unicodeQ在M需要的时候强制{换回?ASCIIQ你甚至永远都不用注意。但是如果你要处理其它语a的数据,Python 已经准备好了?/p>
q行上述代码QPython会给Z面的错误提示 说是遇到非ASCII字符了,q让我们参考pep-0263。PEP-0263QPython Enhancement ProposalQ上面说得很清楚了,Python也意识到了国际化问题Qƈ提出了解x案。根据提案上面的要求Q我们有如下代码 E序q行的结果如下: 我们可以看到Q通过引入~码声明Q我们可以正常地在用中文了Q而且在code 1?中,控制C能正的把中文打印出来。但是,很明显,上面的代码也反映Z不少的问题: Z么?Z么?我们可以先在脑v中模拟一下我们用Python的流E:首先Q我们先用编辑器~写好源代码Q保存成文g。如果源代码中有~码声明而且用的~辑器支持该语法Q那么该文g׃相应的编码方式保存在盘中?strong>注意Q?/strong>~码声明和源文g的编码不一定是一致的Q你完全可以在编码声明中声明~码为UTF-8Q但是用GB2312来保存源文g。当Ӟ我们不可能自ȝ|故意写错Q而且好的IDE也能强制保证两者的一致性,但是Q如果我们用C本或者EditPlus{编辑器来编写代码的话,一不小心就会出现这U问题的?br> 得到一?py文g后,我们可以运行它了,q是Q我们就把代码交lPython解析器来完成解析工作。解析器d文gӞ先解析文件中的编码声明,我们假设文g的编码ؓgb2312Q那么先文件中的内容由gb2312转换成UnicodeQ然后再把这些Unicode转换为UTF-8格式的字节串。完成这一步骤后,解析器把q些UTF-8字节串分D,解析。如果遇C用Unicode字符Ԍ那么׃用相应的UTF-8字节串创建Unicode字符Ԍ如果E序中用的是一般的字符Ԍ那么解析器先UTF-8字节串通过Unicode转换成相应编码(q里是gb2312~码Q的字节Ԍq用其创Z般的字符串对象。也是_Unicode字符串跟一般字W串在内存中的存放格式是不一LQ前者用UTF-8的格式,后者用GB2312格式?br> 好了Q内存中的字W串存放格式我们知道了,下面我们要了解print的工作方式。print其实只是负责把内存中相应的字节串交给操作pȝQ让操作pȝ相应的程序(譬如cmdH口Q进行显C。这里有两种情况Q?br> 1、若字符串是一般的字符Ԍ那么print只需把内存中相应的字节串推送给操作pȝ。如例子中的code 1?br> 2、如果字W串是Unicode字符Ԍ那么print在推送之前先q行相应的encodeQ我们可以显CZ用Unicode的encodeҎ使用合适的~码方式来编码(例子中code 2Q,否则Python使用默认的编码方式进行编码,也就是ASCIIQ例子中的code 3Q。当然ASCII是不可能正确~码中文的,因此Python报错?br> xQ上面的三个问题我们已经可以解析W一和第三个了。至于第二个问题Q因为Python中有两种字符Ԍ一般字W串和Unicode字符Ԍ两者都有各自的字符处理Ҏ。对于前者,Ҏ是以字节的方式进行的Q而且在GB2312中,每个汉字占用两个字节Q因此得到的l果?Q对于后者,也就是Unicode字符Ԍ所有字W都是统一看待的,因此得到3?br> 虽然上面只提C控制台程序的中文问题Q但是文件读写以及网l传输中出现的中文问题在原理上都是类似的。Unicode的出现可以很大程度上解决软g的国际化问题Q同时Python为Unicode提供了极好的支持Q因此,我徏议大家在~写Python的程序时Q都l一使用Unicode方式。保存文件时使用UTF-8的编码方式。How to Use UTF-8 with Python有详l的描述?br>
]]>
一、GNU 风格的版本号命名格式 :
ȝ本号 . 子版本号 [. 修正版本?[. ~译版本?]]
英文对照 : Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]
CZ : 1.2.1, 2.0, 5.0.0 build-13124
二、Windows 风格的版本号命名格式 :
ȝ本号 . 子版本号 [ 修正版本?[. ~译版本?]]
英文对照 : Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]
CZ: 1.21, 2.0
三?Net Framework 风格的版本号命名格式:
ȝ本号.子版本号[.~译版本号[.修正版本号]]
英文对照: Major_Version_Number.Minor_Version_Number[.Build_Number[.Revision_Number]]
版本L二至四个部分l成Q主版本受次版本受内部版本号和修订号。主版本号和ơ版本号是必选的Q内部版本号和修订号是可选的Q但是如果定义了修订号部分,则内部版本号是必选的。所有定义的部分都必L大于或等?0 的整数?
应根据下面的U定使用q些部分Q?
Major Q具有相同名UC不同ȝ本号的程序集不可互换。例如,q适用于对产品的大量重写,q些重写使得无法实现向后兼容性?
Minor Q如果两个程序集的名U和ȝ本号相同Q而次版本号不同,q指C显著增强,但照ֈ了向后兼Ҏ。例如,q适用于品的修正版或完全向后兼容的新版本?
Build Q内部版本号的不同表C对相同源所作的重新~译。这适合于更改处理器、^台或~译器的情况?
Revision Q名U、主版本号和ơ版本号都相同但修订号不同的E序集应是完全可互换的。这适用于修复以前发布的E序集中的安全漏z?
E序集的只有内部版本h修订号不同的后箋版本被认为是先前版本的修补程?(Hotfix) 更新?
版本L理策?
一?GNU 风格的版本号理{略Q?
1Q项目初版本?, 版本号可以ؓ 0.1 ?0.1.0, 也可以ؓ 1.0 ?1.0.0, 如果你ؓ人很低调 , 我想你会选择那个ȝ本号?0 的方?;
2Q当目在进行了局部修Ҏ bug 修正?, ȝ本号和子版本号都不变 , 修正版本号加 1;
3. 当项目在原有的基上增加了部分功能?, ȝ本号不变 , 子版本号?1, 修正版本号复位ؓ 0, 因而可以被忽略?;
4Q当目在进行了重大修改或局部修正篏U较?, 而导致项目整体发生全局变化?, ȝ本号?1;
5Q另?, ~译版本号一般是~译器在~译q程中自动生成的 , 我们只定义其格式 , q不q行Zؓ控制 .
二?Window 下的版本L理策略:
1Q目初版?, 版本号ؓ 1.0 ?1.00;
2. 当项目在q行了局部修Ҏ bug 修正Ӟȝ本号和子版本号都不变 , 修正版本号加 1;
3. 当项目在原有的基上增加了部分功能?, ȝ本号不变 , 子版本号?1, 修正版本号复位ؓ 0, 因而可以被忽略?;
4. 当项目在q行了重大修Ҏ局部修正篏U较?, 而导致项目整体发生全局变化?, ȝ本号?1;
5. 另外 , ~译版本号一般是~译器在~译q程中自动生成的 , 我们只定义其格式 , q不q行Zؓ控制 .
另外 , q可以在版本号后面加?Alpha, Beta, Gamma, Current, RC (Release Candidate), Release, Stable {后~ , 在这后缀后面q可以加?1 位数字的版本?.
对于用户来说 , 如果某个软g的主版本可行了升 , 用户q想l箋那个软g , 则发行Y件的公司一般要对用h取升U费?; 而如果子版本h修正版本号发生了升 , 一般来说是免费?.
beta 外部试?
demo 演示?
Enhance 增强版或者加强版 属于正式?
Free 自由?
Full version 完全?属于正式?
shareware ׃n?
Release 发行?有时间限?
Upgrade 升?
Retail 零售?
Cardware 属共享Y件的一U,只要l作者回复一电邮或明信片即可。(有的作者ƈ由此提供注册码等Q,目前q种形式已不多见?
Plus 属增强版Q不q这U大部分是在E序界面及多媒体功能上增强?
Preview 预览?
Corporation & Enterprise 企业?
Standard 标准?
Mini q你版也叫精版只有最基本的功?
Premium ?贵h?
Professional ?专业?
Express ?特别?
Deluxe ?豪华?
Regged ?已注册版
CN ?体中文版
CHT ?J体中文?
EN ?英文?
Multilanguage ?多语a?
注释Q?
α?
此版本表C软g仅仅是一个初步完成品Q通常只在软g开发者内部交,也有很少一部分发布l专业测试h员。一般而言Q该版本软g?bug 较多Q普通用h好不要安装?
βQbetaQ版
该版本相对于α版已有了很大的改q,消除了严重的错误Q但q是存在着一些缺P需要经q大规模的发布测试来q一步消除。这一版本通常pY件公司免费发布,用户可从相关的站点下载。通过一些专业爱好者的试Q将l果反馈l开发者,开发者们再进行有针对性的修改。该版本也不适合一般用户安装?
γ?
该版本已l相当成熟了Q与卛_发行的正式版相差无几Q如果用户实在等不及了,可以装上一试?
trialQ试用版Q?
试用版Y件在最q的几年里颇为流行,主要是得益于互联|的q速发展。该版本软g通常都有旉限制Q过期之后用户如果希望l用,一般得交纳一定的费用q行注册或购买。有些试用版软gq在功能上做了一定的限制?
unregisteredQ未注册版)
未注册版与试用版极其cMQ只是未注册版通常没有旉限制Q在功能上相对于正式版做了一定的限制Q例如绝大多数网l电话Y件的注册版和未注册版Q两者之间在通话质量上有很大差距。还有些虽然在用上与正式版毫无二致Q但是动不动׃弹出一个恼人的消息框来提醒你注册,如看图Y?acdsee 、智能陈桥汉字输入Y件等?
demo?
也称为演C版Q在非正式版软g中,该版本的知名度最大?demo 版仅仅集成了正式版中的几个功能,颇有点像 unregistered 。不同的是, demo 版一般不能通过升或注册的Ҏ变ؓ正式版?
以上是Y件正式版本推Z前的几个版本Q?#945;?#946;?#947;可以UCؓ试版,大凡成熟软gM有多个测试版Q如 windows 98 ?#946;版,前前后后近?10 个。这么多的测试版一斚wZ最l品尽可能地满用L需要,另一斚w也尽量减了软g中的 bug 。?trial ?unregistered ?demo 有时l称为演C版Q这一cȝ本的q告色彩较浓Q颇有点先尝后买的味道,对于普通用戯言自然是可以免费尝鲜了?
正式版 不同cd的Y件的正式版本通常也有区别?
release
该版本意?#8220;最l释攄”Q在Z一pd的测试版之后Q终归会有一个正式版本,对于用户而言Q购买该版本的Y件绝对不会错。该版本有时也称为标准版?一般情况下Q?release 不会以单词Ş式出现在软g面上,取而代之的是符?(r) Q如 windows nt(r) 4.0 ?ms-dos(r) 6.22 {?
registered
很显Ӟ该版本是?unregistered 相对的注册版。注册版?release 和下面所讲的 standard 版一P都是软g的正式版本,只是注册版Y件的前n有很大一部分是从|上下蝲的?
standard
q是最常见的标准版Q不论是什么YӞ标准版一定存在。标准版中包含了该Y件的基本lg及一些常用功能,可以满一般用L需求。其h相对高一U版本而言q是“qxqh”的?
deluxe
思义即ؓ“豪华?#8221;。豪华版通常是相对于标准版而言的,主要区别是多了几功能,h当然会高Z大块Q不推荐一般用戯买。此版本通常是ؓ那些q求“完美”的专业用h准备的?
reference
该版本型号常见于癄全书中,比较有名的是微Y?encarta pd?reference 是最高别,其包含的主题、图像、媄片剪辑等相对?standard ?deluxe 版均有大q增加,定w׃张光盘猛增至三张光盘Qƈ且加入了很强的交互功能,当然h也不菌Ӏ可以这么说Q这一版本的百U全书才能算是真正的癄全书Q也是发烧友们收藏的首选?
professionalQ专业版Q?
专业版是针对某些特定的开发工兯Y件而言的。专业版中有许多内容是标准版中所没有的,q些内容对于一个专业的软g开发h员来说是极ؓ重要的。如微Y?visual foxpro 标准版ƈ不具备编译成可执行文件的功能Q这对于一个完整的开发项目而言昄是无法忍受的Q若客户Z没有 foxpro 不能用。如果用专业版就没有q个问题了?
enterpriseQ企业版Q?
企业版是开发类软g中的极品Q相当于癄全书中的 reference 版)。拥有一套这U版本的软g可以毫无障碍地开发Q何别的应用软g。如著名?visual c++ 的企业版相对于专业版来说增加了几个附加的Ҏ,?sql 调试、扩展的存储q程向导、支?as/400 ?ole db 的访问等。而这一版本的hg是普通用h法接受的。如微Y?visual studios 6.0 enterprise 中文版的h?23000 元?
其他版本 除了以上介绍的一些版本外Q还有一些专有版本名U?
updateQ升U版Q?
升版的软g是不能独立用的Q该版本的Y件在安装q程中会搜烦原有的正式版Q如果不存在Q则拒绝执行下一步。如 microsoft office 2000 升版?windows 9x 升版等{?
OEM?
OEM版通常是捆l在g中而不单独销售的版本。将自己的品交l别的公司去卖,保留自己的著作权Q双方互惠互利,一举两得?
单机Q网l)?
|络版在功能、结构上q比单机版复杂,如果留心一下Y件的报hQ你׃发现某些软g单机版和|络版的h相差非常大,有些|络版甚臛_一个客L口就要加不少钱?
普及?
该版本有时也会被UCؓ׃n版,其特Ҏh便宜Q有些甚臛_全免费)、功能单一、针Ҏ强Q当然也有占领市场、打ȝ版等因素Q。与试用版不同的是,该版本的软g一般不会有旉上的限制。当Ӟ如果用户惛_U,最好还是去购买正式版?
以上是一些常见Y件版本的要介l,随着软g市场行ؓ的变化,现在也出C一些新的版本命名方式,比如windows xp中的xp是取自于experience中的W二、第三个字母。希望以上内容能够对大家的购买、用和下蝲软g有所帮助?
Z商业上考虑Q很多的软g都不是非怸谨的遵@q个规则的。最有名的就是微软了。例如他?NT pd版本。大家比较熟悉的是从 NT 4.0 开始的?99 q推Z windows 2000 Q?2001 q退Z windows xp Q?2003 q推Z windows 2003 Q乍一看版本区别蛮大的Q但是看他们的内部版本号׃发现Q变化其实ƈ不大Q只是界面变化的大了而已。这是Y件公司经常干的事情?Window 2000 的版本号?NT 5.0 Q?windows xp 的版本号?NT 5.1 Q?windows 2003 的版本号?NT 5.2 Q而现在的 longhorn 才是真正?NT 6.0 Q印象中是,不敢认Q。这样就可以持箋的赚q大客户的钱。毕竟h的眼睛看得东西是最直观的,所以给人感觉也是变化最大的?/p>
]]>
2 #
3 # getDirSize.py
4 #
5 # Copyright 2009 Hiro <wangzhaoren@gmail.com>
6 #
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20 # MA 02110-1301, USA.
21
22 import os
23 from os.path import join, getsize
24
25 def getDirSize( dir ):
26 size = 0L
27 for root, dirs, files in os.walk(dir):
28 size += sum( [getsize(join(root, name)) for name in files] )
29 return size
30
31 def main():
32
33 filesize = getDirSize( "/home/wangzr" )
34 print ( "there are %0.3f" %(filesize/1024/1024), "Mb in /home/wangzr" )
35
36 return 0
37
38 if __name__ == '__main__': main()
39
]]>
2 #
3 # getDirSize2.py
4 #
5 # Copyright 2009 Hiro <wangzhaoren@gmail.com>
6 #
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20 # MA 02110-1301, USA.
21
22
23 import os
24 #from os import listdir
25
26 def getDirSize( source ) :
27 size = 0L
28 if os.path.isfile( source ) :
29 size += os.stat( source )[6]
30 elif os.path.isdir( source ) :
31 for src in os.listdir( source ) :
32 srcpath = os.path.join( source, src )
33 print srcpath
34 size += getDirSize( srcpath )
35
36 return size
37
38 def main():
39
40 dirname = r"/home/wangzr"
41 print getDirSize( dirname ) / 1024 /1024
42 return 0
43
44 if __name__ == '__main__': main()
45
]]>
?9.13. unicode 介绍
>>> s = u'Dive in'
>>> s
u'Dive in'
>>> print s
Dive in?9.14. 存储?ASCII 字符
>>> s = u'La Pe\xf1a'
>>> print s
Traceback (innermost last):
File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('latin-1')
La Peña?9.15. sitecustomize.py
# sitecustomize.py
# this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('iso-8859-1') ?9.16. 讄默认~码的效?/h3>
>>> import sys
>>> sys.getdefaultencoding()
'iso-8859-1'
>>> s = u'La Pe\xf1a'
>>> print s
La Peña?9.17. 指定.py文g的编?/h3>
#!/usr/bin/env python
# -*- coding: UTF-8 -*-?9.18. russiansample.xml
<?xml version="1.0" encoding="koi8-r"?>
<preface>
<title>Преисxо{ие</title>
</preface>?9.19. 解析 russiansample.xml
>>> from xml.dom import minidom
>>> xmldoc = minidom.parse('russiansample.xml')
>>> title = xmldoc.getElementsByTagName('title')[0].firstChild.data
>>> title
u'\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435'
>>> print title
Traceback (innermost last):
File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> convertedtitle = title.encode('koi8-r')
>>> convertedtitle
'\xf0\xd2\xc5\xc4\xc9\xd3\xcc\xcf\xd7\xc9\xc5'
>>> print convertedtitle
Преисxо{ие
]]>
Python中有两种字符Ԍ分别是一般的字符Ԍ每个字符? bits表示Q和Unicode字符Ԍ每个字符用一个或者多个字节表C)Q它们可以相互{换。关于UnicodeQJoel Spolsky ?The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 中有生动的说明,Jason Orendorff ?Unicode for programmers 有着更ؓ全面的描qͼ在此我就不再多说什么了。来看下面的代码Q?/p>
print s
print "-------------code 1----------------"
a = "中文a我爱?
print a
print a.find("?)
b = a.replace("?, "喜欢")
print b
print "--------------code 2----------------"
x = "中文a我爱?
y = unicode(x, "gb2312")
print y.encode("gb2312")
print y.find(u"?)
z = y.replace(u"?, u"喜欢")
print z.encode("gb2312")
print "---------------code 3----------------"
print y
中文a我爱?br>5
中文a我喜Ƣ你
--------------code 2----------------
中文a我爱?br>3
中文a我喜Ƣ你
---------------code 3----------------
Traceback (most recent call last):
File "G:\Downloads\eclipse\workspace\p\src\hello.py", line 16, in <module>
print y
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
1、code 1 ?2在用print旉用了不同的方式,1是直接printQ?在print之前先进行编?br> 2、code 1 ?2中在同样的字W串查找同一个字W?#8220;?#8221;Q得出的l果不一P分别??Q?br> 3、code 3 中直接打印unicode字符?y时出现错误(q也是ؓ什么code 2中要先进行编码的原因Q?/p>
]]>