The*_*niz 2 python unicode tkinter python-3.x
长话短说,我正在制作一个将一大堆 Unicode 写入文件的程序。它通过使用 Tkinterasksaveasfile对话框让用户选择他们想要保存它的位置来做到这一点。这里是有问题的片段(顺便说一句,我进口tkinter.filedialog的fudder只是为了好玩。):
name = fudder.askopenfilename(defaultextension =("Python Files","*.py"),title = "Choose a file to encrypt.")
with open(name,'r') as Usefile:
filecont = Usefile.read()
if filecont is None:
return
else:
result = crypt(filecont)
with fudder.asksaveasfile(mode = 'w', defaultextension = '.txt', title = 'Save the decrypted file.') as newf:
if result is None:
return
else:
newf.write(result[0].encode('utf-8'))
newf.write('\n\n\nKey:\n\n\n')
newf.write(result[1].encode('utf-8'))
newf.close()
Run Code Online (Sandbox Code Playgroud)
我看了几个像这样的问题,但没有一个专门解决这个问题。该asksaveasfile对话框的工作方式与open函数一样,但我无法指定编码。我尝试将其编码为字节,但您只能将字符串写入文件,并且不能将字节转换为字符串,然后再将其转换回字节。
我检查了代码asksaveasfile,确实它只通过文件名和模式打开。严格来说,它是一个方便的函数,将调用 toasksaveasfilename与调用相结合open(filename, mode),默认所有其他参数。所以不要使用它。
相反,asksaveasfilename您自己使用并显式打开文件,就像您为源文件所做的那样。然后,您可以编写您想要的开放调用,encoding='utf-8'以及任何其他非默认选项。
第一个with应该在您阅读Usefile并不再需要它后结束。if因此,该语句应被删除。
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |