在Python中将Unicode文件写入Text小部件

时间:2014-03-04 11:38:08

标签: python unicode tkinter

我正在尝试使用Tkinter在Text小部件中打开一个Unicode文件,这是我的代码

import codecs
def callback():
    matric_name = entry.get()
    with open(matric_name.rstrip('\n')+".txt", 'r') as content_file:
        content = content_file.read()   

    #myFile=file(matric_name.rstrip('\n')+".txt") # get a file handle
    # myText= myFile.read() # read the file to variable   
    # f = codecs.open(matric_name.rstrip('\n')+".txt", mode="r", encoding="iso-8859-1")
    # myText= f.read()
    # print myText
    #  myFile.close()

    print content
    mytext.insert(0.0,content)

正确打印,但它没有正确写入文本小部件

小部件的输出为ÿþS

1 个答案:

答案 0 :(得分:2)

您需要使用正确的编码来读取文件。这可以使用编解码器模块完成。一旦您正确读取数据,Tk文本小部件将接受unicode字符串。这里的一个例子是将unicode文件加载到文本小部件中。将unicode文本文件名称作为命令行参数。

#!/usr/bin/python
import sys,codecs
from Tkinter import *

class App(Frame):
    def __init__(self, parent = None):
        Frame.__init__(self, parent)
        self.grid()
        self.text = Text(self)
        self.text.grid()

    def Load(self,filename):
        with codecs.open(filename, encoding='utf-16') as f:
            for line in f:
                self.text.insert('end', line)

def main(argv = None):
    if argv is None:
        argv = sys.argv
    app = App()
    if len(argv) > 1:
        app.after_idle(lambda: app.Load(argv[1]))
    app.mainloop()

if __name__=='__main__':
    sys.exit(main())