我有一个python文件,它读取用户提供的文件,处理它,并以闪存卡格式提问。该程序适用于英语txt文件,但在尝试处理法语文件时遇到错误。
当我第一次遇到错误时,我正在使用Windows命令提示符窗口并运行python cards.py
。输入法语文件时,我立即得到UnicodeEncodeError
。在挖掘之后,我发现它可能与我使用cmd窗口的事实有关。所以我尝试使用IDLE。我没有收到任何错误,但我会得到奇怪的字符,例如œ
和Ã
以及®
。
经过进一步研究,我发现一些documentation指示我在代码的encoding='insert encoding type'
部分使用open(file)
。在IDLE中再次运行程序后,它似乎最小化了问题,但我仍然会得到一些奇怪的字符。在cmd中运行时,它不会立即中断,但最终会遇到未知字符。
我的问题:我应该实现什么来确保程序可以处理文件中的所有字符(给定任何语言)以及为什么IDLE和命令提示符处理文件的方式不同?
编辑:我忘了提到我最终使用的是utf-8,它给出了我描述的结果。
答案 0 :(得分:1)
这是常见的问题。 似乎您正在使用不支持unicode的cmd,因此在将输出转换为cmd运行的编码时会发生错误。由于unicode具有比cmd中使用的编码更宽的字符集,因此会出现错误
IDLE是在tkinter的Text小部件的基础上构建的,它完美支持unicode中的Python字符串。
最后,当您指定要打开的文件时,open
函数会假定它处于平台默认状态(每locale.getpreferredencoding()
)。因此,如果您的文件编码不同,则应在关键字arg encoding
至open
func中提及。
答案 1 :(得分:0)
Windows控制台本身不支持Unicode(尽管人们对chcp 65001
的看法)。它设计为向后兼容,因此只支持8位字符集。
请改用win-unicode-console。它与较低级别的cmd对话,允许打印所有 Unicode字符,重要的是输入。
启用它的最佳方法是使用usercustomize
脚本,以便在您的计算机上默认启用。