Python 非英语文本的处理
我有一个python文件,它读取用户给定的文件,对其进行处理,并以闪存卡格式提问。该程序可以很好地处理英文txt文件,但我在处理法文文件时遇到错误 当我第一次遇到错误时,我正在使用windows命令提示符窗口并运行Python 非英语文本的处理,python,python-3.x,unicode,utf-8,Python,Python 3.x,Unicode,Utf 8,我有一个python文件,它读取用户给定的文件,对其进行处理,并以闪存卡格式提问。该程序可以很好地处理英文txt文件,但我在处理法文文件时遇到错误 当我第一次遇到错误时,我正在使用windows命令提示符窗口并运行python cards.py。当输入法语文件时,我立即得到一个unicodeincoder错误。在仔细研究之后,我发现这可能与我使用cmd窗口的事实有关。所以我试着用IDLE。我没有收到任何错误,但我会收到一些奇怪的字符,如œ和Ã和> 经过进一步研究,我发现在我的代码的open(fi
python cards.py
。当输入法语文件时,我立即得到一个unicodeincoder错误
。在仔细研究之后,我发现这可能与我使用cmd窗口的事实有关。所以我试着用IDLE。我没有收到任何错误,但我会收到一些奇怪的字符,如œ
和Ã
和>
经过进一步研究,我发现在我的代码的open(file)
部分中有一些指示使用encoding='insert encoding type'
。在空闲状态下再次运行程序后,似乎可以将问题最小化,但我仍然会得到一些奇怪的字符。在cmd中运行它时,它不会立即中断,但最终会在遇到未知字符时中断
我的问题:我应该实现什么来确保程序可以处理文件中的所有字符(给定任何语言),为什么IDLE和命令提示符处理文件的方式不同
编辑:我忘了提到我最终使用了utf-8,它给出了我描述的结果。这是一个常见的问题。
似乎您正在使用不支持unicode的cmd,因此在将输出转换为cmd运行的编码时发生错误。由于unicode的字符集比cmd中使用的编码更宽,因此会出现错误
IDLE是在tkinter的文本小部件上构建的,该小部件完全支持unicode中的Python字符串
最后,当您指定要打开的文件时,open
函数假定它处于平台默认状态(根据locale.getpreferredencoding()
)。因此,如果您的文件编码不同,您应该在关键字argencoding
toopen
func.中准确地提到它。Windows控制台本机不支持Unicode(尽管人们对chcp 65001
有什么看法)。它的设计是向后兼容的,因此只支持8位字符集
改用。它在较低的级别与cmd通信,这允许打印所有的Unicode字符,更重要的是,允许输入
启用它的最佳方法是在usercustomize
脚本中,因此在您的机器上默认启用该脚本。我认为没有一种方法可以处理任何类型的编码?或者你必须指定每一个吗?@David这就是Unicode新世界秩序的样子。真正的编码只有在未知的情况下才能猜测,例如chardet
lib。但有些编码有标记,你可以准确地分辨出那是什么it@fzzylogic根据文档,open
依赖于平台的默认编码。在大多数情况下,它是utf-8,但不是全部。@thodnev Tx用于更正。大卫,如果你的情况可能的话,你会发现用utf-8标准化更容易。@thodnev请看我的编辑。我最终使用了utf-8。我想我将无法完全解码文件,除非给定编码类型。正如我在最初的帖子中所说的,即使使用utf-8,我仍然会得到奇怪的字符可能重复的注意,您可以在命令提示符下发出命令chcp 65001
,以切换到Unicode(utf-8)代码页。您没有提到您使用的是python 2还是python 3。。当涉及到unicode时,两者之间有很大的区别。简而言之,您可能会发现使用3更容易。@fzzylogic我没有直接说,对,但我包含了python-3.x标记。Thanks@Basicchcp 65001
只应被视为快速修复方案。它不完全支持utf-8,并且不允许Python正确地接收多字节字符