Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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
Python 非英语文本的处理_Python_Python 3.x_Unicode_Utf 8 - Fatal编程技术网

Python 非英语文本的处理

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文件,它读取用户给定的文件,对其进行处理,并以闪存卡格式提问。该程序可以很好地处理英文txt文件,但我在处理法文文件时遇到错误

当我第一次遇到错误时,我正在使用windows命令提示符窗口并运行
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()
)。因此,如果您的文件编码不同,您应该在关键字arg
encoding
to
open
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@Basic
chcp 65001
只应被视为快速修复方案。它不完全支持utf-8,并且不允许Python正确地接收多字节字符