Python以及wxpython文本编码处理
NeatEditor是一个文本编辑器,我会用它编辑各种文本文件,编码肯定也是五花八门:UTF-8,GBK,BIG5 等等。
NeatEditor使用wxpython的StyledTextCtrl作为编辑控件,StyledTextCtrl只处理UTF-8的文本;这就需要在打开文件后,把内容转换成UTF-8编码。python中的编码转换,首先需要将来源转换成unicode,然后再把unicode格式的内容转成所需的编码。为了能将内容正确转换成unicode编码,就需要在转换时候指定源编码:content = unicode(content, ‘utf-8′)
作为一个为文本编辑器,是不知道所编辑的文件是源编码;我观察了几款文本编辑器这方面的处理,当打开一个Cyrillic(斯拉夫语系,也就是俄语的编码)编码的文件,EditPlus会弹出选择编码的对话框,这时候如果选择了GBK编码,EditPlus就会提示出错,请重新选择编码,直到正确转换为止;当然也可以跳出。
根据这个思路,NeatEditor在处理这个问题时,首先会尝试用UTF-8对源文件进行转码,如果跑出异常则尝试ANSI(ANSI是当前操作系统的默认编码),再有异常就弹出对话框让用户选择编码!
try: content = unicode(content, 'utf-8') except: try: content = unicode(content, Common.defaultEncoding) except: if Dialog.EncodingAlert(self.win): while True: try: encoding = Dialog.EncodingSelect(self.win) content = unicode(content, encoding) break except: if not Dialog.EncodingAlert(self.win): break


