Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2/Windows7:打开的文件名包含德语Umlaut_Python_File_Encoding_Tkinter - Fatal编程技术网

Python2/Windows7:打开的文件名包含德语Umlaut

Python2/Windows7:打开的文件名包含德语Umlaut,python,file,encoding,tkinter,Python,File,Encoding,Tkinter,我正试图打开一个文件名是通过在ttk.Entry中键入文件名创建的,其中附加了Tkinter.StringVar 如果我试图通过在另一个文件中键入相同的文件名来再次打开() 如果我使用德语“Umlaute”,则输入失败 我从StringVar的.get()-方法中获得一个utf-8编码字符串 当我列出当前工作目录中的文件时,它们不是utf-8编码的。(我正在使用Windows 7!) 如何处理这个问题?您使用的是哪个版本的Python?Python2和Python3之间的Unicode处理非常不

我正试图打开一个文件名是通过在
ttk.Entry
中键入文件名创建的,其中附加了
Tkinter.StringVar

如果我试图通过在另一个文件中键入相同的文件名来再次
打开()
如果我使用德语“Umlaute”,则输入失败

我从
StringVar
.get()
-方法中获得一个
utf-8
编码字符串

当我列出当前工作目录中的文件时,它们不是
utf-8
编码的。(我正在使用Windows 7!)


如何处理这个问题?

您使用的是哪个版本的Python?Python2和Python3之间的Unicode处理非常不同。我使用的是Python2.7。并在脚本开头声明了
#-*-编码:utf-8-*-
。一个旁注是,当我列出当前工作目录中的文件时,它们不是utf-8编码的。-->请注意,您的终端可能无法正确显示它们,这并不意味着Python无法正确处理它们。您可以发布您的实际代码吗?
sys.getfilesystemencoding()
在您的系统上返回什么?这可能就是您应该用于
open
调用的编码。您也可以只传递一个
unicode
字符串,让
open
函数为您进行编码。
sys.getfilesystemencoding()
返回
mbcs
。如何配置用于
open()
的编码?这是一个示例,因为实际模块太大。。正如我现在看到的,即使我使用umlaut,这也能起作用。因此,错误必须在其他地方。我必须完成创建文件名的例程。也许还有另一种错误,我现在没有考虑。很抱歉
# -*- coding: utf-8 -*-

import Tkinter as tk
import ttk
import sys
import os
from pprint import pprint
import pickle


class TestApp(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        self.varFilename = tk.StringVar()
        self.etyFilename = ttk.Entry(master=self, textvariable=self.varFilename)

        self.frmBtn = ttk.Frame(master=self)
        self.btnSave = ttk.Button(master=self.frmBtn, text='Save',
                                  command=self.save)
        self.btnOpen = ttk.Button(master=self.frmBtn, text='Open',
                                  command=self.openFile)

        self.etyFilename.grid(row=0, column=0, sticky=tk.EW, padx=3, pady=3)
        self.frmBtn.grid(row=1, column=0, sticky=tk.EW)
        self.btnSave.grid(row=0, column=0, sticky=tk.SE, padx=3, pady=3)
        self.btnOpen.grid(row=0, column=1, sticky=tk.SE, padx=3, pady=3)

        self.mainloop()

    def save(self, *args):
        someData = {'foo': 'bar'}

        filename = self.varFilename.get()

        try:
            with open(filename, 'wb') as f:
                pickle.dump(someData, f)

        except IOError, e:
            print e
            sys.exit(1)


    def openFile(self, *args):
        filename = self.varFilename.get()
        print filename

        print 'Files in cwd:'
        pprint(os.listdir(os.getcwd()))

        try:
            with open(filename, 'rb') as f:
                someData = pickle.load(f)
                print someData

        except IOError, e:
            print e
            sys.exit(1)


TestApp()