因为Python是自带文档,可以通过help函数来查询每一个系统函数的用法解释说明。一般来说,关键的使用方法和注意点在这个系统的文档中都说的很清楚。我试图在网上找过系统文档的中文版的函数功能解释,但是都没有找到,所以我决定将就使用英文版的系统自带的函数解释来学习。
如果你想进行Tkinter和wxPython编程,想要知道一般的widget的使用方法和属性介绍,英文又不是太好的话,我推荐你,你可以去看看《Python与Tkinter编程》这本书,里面392页到538页的附录B和附录C选择了常用的函数和近乎所有的属性进行介绍,精彩不容错过。
我上面提到的这个工具很快做好了。可以把没有查询过的函数进行查询,并保存关键字key和查询结果info,便于下次直接从列表list中翻出来看;要是发现没有查过,则手动添加到列表list——就是这样一个简单的小工具。一切看上去都很顺利。但是问题也来了:英文的info打开后,解释里面有的单词不知道含义,查完单词之后想写在info里面,保存之后可以下次直接从硬盘打开看。但是在英文info中输入中文,保存过程中就出现了解码不了的问题,也就是解码到中文部分就弹出下面这个错误来:
UnicodeEncodeError: 'ascii' codec can't encode character u'/u6211' in position 61: ordinal not in range(128)
其中的61这个位置是弹性的,就是info中加入了中文的那个位置。这个错误基本一直都存在,也就是当我想要把修改过后的info写入文件的时候:
代码如下:
fp = open('tt.txt','w')
fp.write(info.encode("UTF-8")) # 此处错误
fp.close()
这三行本身看上去没有错误。但是就是在中间这行代码处出现了错误。难道是encode的方式不对?我有尝试了很多种编码,如ANSI、UTF-8、SHIFT_JIS、GB2312、GBK等编码,发现都不行。于是我就糊涂了。
现在我已经知道为什么错误了。问题就在于修改之后的info这个字符串变量。info中的数据是我从系统中通过help函数查到的字串(也就是原始的纯英文的info)加上我手动输入的中文得到的一个综合的字符串。在我从系统中查询系统文档时,我对原始info进行了如下保存:
代码如下:
fp = open('tt.txt','w')
fp.write(info)
fp.close()
注意,错就错在直接将原始info直接写入到文件中。这样写之后的编码方式大家知道是什么吗?你打开tt.txt,查看编码方式将会知道,其编码方式是ANSI格式。于是错误就是这样产生的:我查询关键字key,将这个ANSI格式的字串info读到控件中显示,然后我有手动的添加了UTF-8格式的中文字符,于是通连起来形成的字符串info,就是一个混乱而具有多种编码方式的字符串info,系统怎么write都无法只使用一种编码方式将这个混合字串info再次写到tt.txt中去。
新闻热点
疑难解答