处理非英文文本

时间:2016-08-20 00:19:08

标签: python python-3.x unicode utf-8

我有一个python文件,它读取用户提供的文件,处理它,并以闪存卡格式提问。该程序适用于英语txt文件,但在尝试处理法语文件时遇到错误。

当我第一次遇到错误时,我正在使用Windows命令提示符窗口并运行python cards.py。输入法语文件时,我立即得到UnicodeEncodeError。在挖掘之后,我发现它可能与我使用cmd窗口的事实有关。所以我尝试使用IDLE。我没有收到任何错误,但我会得到奇怪的字符,例如œÃ以及®

经过进一步研究,我发现一些documentation指示我在代码的encoding='insert encoding type'部分使用open(file)。在IDLE中再次运行程序后,它似乎最小化了问题,但我仍然会得到一些奇怪的字符。在cmd中运行时,它不会立即中断,但最终会遇到未知字符。

我的问题:我应该实现什么来确保程序可以处理文件中的所有字符(给定任何语言)以及为什么IDLE和命令提示符处理文件的方式不同?

编辑:我忘了提到我最终使用的是utf-8,它给出了我描述的结果。

2 个答案:

答案 0 :(得分:1)

这是常见的问题。 似乎您正在使用不支持unicode的cmd,因此在将输出转换为cmd运行的编码时会发生错误。由于unicode具有比cmd中使用的编码更宽的字符集,因此会出现错误

IDLE是在tkinter的Text小部件的基础上构建的,它完美支持unicode中的Python字符串。

最后,当您指定要打开的文件时,open函数会假定它处于平台默认状态(每locale.getpreferredencoding())。因此,如果您的文件编码不同,则应在关键字arg encodingopen func中提及。

答案 1 :(得分:0)

Windows控制台本身不支持Unicode(尽管人们对chcp 65001的看法)。它设计为向后兼容,因此只支持8位字符集。

请改用win-unicode-console。它与较低级别的cmd对话,允许打印所有 Unicode字符,重要的是输入。

启用它的最佳方法是使用usercustomize脚本,以便在您的计算机上默认启用。