资源描述:
《Python核心编程(中文第二版)带目录.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、符串的文件名.第9-19行我们创建了一个Unicode字符串,用我们指定的编码,格式对其进行编码,然后把它写入到文Edit?By?Vheavens?????????????????????????????,??Edit?By?Vheavens?件中去,(9-13行),接着我们把内容从文件中重新读出来,解码,显示到屏幕上,输,出的时候去掉print的自动换行,因为我们已经在字符串中写了一个换行符(15-19,行).例6.2简单Unicode字符串例子(uniFile.py)这个简单的例子中,我们把一个Unicode字符串写入到磁盘文件,然后再把它读出,并显示出来。写入的时候用UTF-8编码
2、,读出也一样,用UTF-8.123456789#!/usr/bin/envpython'''Anexampleofreadingandwri,tingUnicodestrings:WritesaUnicodestringtoafileinutf-8andreads,itbackin.'''CODEC='utf-8'FILE='unicode.txt'hello_out=u"Helloworld"10bytes_out=hello_out.encode(CODEC)11f,=open(FILE,"w")12f.write(bytes_out)13f.close()1415f=open(
3、FILE,,"r")16bytes_in=f.read()17f.close()18hello_in=bytes_in.decode(COD,EC)19printhello_in,运行该程序,我们得到如下的输出:$unicode_example.pyHelloWorld在文件系统中也会发现一个叫unicode.txt的文件,里面包含跟输出的内容一致的,数据.$catunicode.txtHelloWorld!Edit?By?Vheavens?????????????????????????????,??Edit?By?Vheavens?简单Web例子在第20章Web编程里面我们展示了一个
4、简单的在CGI应用中使用,Unicode的例子.6.8.6把Unicode应用到实际应用中这些处理Unicode字符串的例子简单到让人感到有点假,事实上,只要你遵守以,下的规则,处理Unicode就是这么简单:程序中出现字符串时一定要加个前缀u.,不要用str()函数,用unicode()代替.不要用过时的string模块--如果传给它,的是非ASCII字符,它会把一切搞砸。不到必须时不要在你的程序里面编解码Uni,cod字符.只在你要写入文件或数据库或者网络时,才调用encode()函数;相应地,,只在你需要把数据读回来的时候才调用decode()函数.这些规则可以规避90%由于,Un
5、icode字符串处理引起的bug.现在的问题是剩下的10%的问题却让你处理不了,,幸亏Python提供了大量的模块、库来替你处理这些问题.它们可以让你用10行Py,thon语句写出其他语言需要100行语句才能完成的功能,但是相应地,对Unicode,支持的质量也完全取决于这些模块、库.Python标准库里面的绝大部分模块都是兼,容Unicode的.除了pickle模块!pickle模块只支持ASCII字符串。如果你把,一个Unicode字符串交给pickle模块来unpickle,它会报异常.你必须先把你的字,符串转换成ASCII字符串才可以.所以最好是避免基于文本的pickle操作.幸
6、运地,是现在二进制格式已经作为pickle的默认格式了,pickle的二进制格式支持不错.,这点在你向数据库里面存东西是尤为突出,把它们作为BLOB字段存储而不是作为,TEXT或者VARCHAR字段存储要好很多.万一有人把你的字段改成了Unicode类型,,这可以避免pickle的崩溃.如果你的程序里面用到了很多第三方模块,那么你很可,能在各个模块统一使用Unicode通讯方面遇到麻烦,Unicode还没成为一项必须的,规定,在你系统里面的第三方模块(包括你的应用要面对的平台系统)需要用相同的,Unicode编码,否则,可能你就不能正确的读写数据.作为一个例子,假设你正在构,建一个用数
7、据库来读写Unicode数据的Web应用.为了支持Edit?By?Vheavens?????????????????????????????,??page1Edit?By?Vheavens?Unicode,你必须确保以下方面对Unicode的支持:数据库服务器(MySQL,PostgreS,QL,SQLServer,等等)数据库适配器(MySQLdb等等)Web开发框架(mod_python,cgi,,Zope,Plane,Djan