【问题标题】:Processing non-english text处理非英文文本
【发布时间】:2025-12-15 12:20:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 请注意,您可以在命令提示符下发出命令chcp 65001 以切换到 Unicode (UTF-8) 代码页。
  • 您没有提到您使用的是 python 2 还是 3.. 在 unicode 方面,两者之间存在很大差异。简而言之,您可能会发现 3. 使用起来更方便。
  • @fzzylogic 我没有直接说,正确,但我包含了 python-3.x 标记。谢谢
  • @Basic chcp 65001 只应被视为快速修复。它不完全支持 utf-8 并且不允许 Python 正确接收多字节字符

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


【解决方案1】:

这是一个常见的问题。 似乎您使用的是不支持 unicode 的 cmd,因此在 输出转换 到您的 cmd 运行的编码期间会发生错误。并且由于 unicode 的字符集比 cmd 中使用的编码更宽,所以会报错

IDLE 建立在 tkinter 的 Text 小部件之上,完美支持 unicode 中的 Python 字符串。

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

【讨论】:

  • 我不认为有办法能够处理任何类型的编码?或者你必须指定每一个?
  • @David 这就是 Unicode 新世界秩序的样子。真正的编码只有在不知道的情况下才能被猜到,作为入门示例 - chardet lib。但是有些编码有标记,你可以确切地知道就是这样
  • @fzzylogic 根据文档,open 依赖于平台的默认编码。在大多数情况下,它是 utf-8,但不是全部。
  • @thodnev Tx 进行更正。大卫,如果可能的话,您可能会发现使用 utf-8 进行标准化更容易。
  • @thodnev 查看我的编辑。我最终使用了 utf-8。我想除非给定编码类型,否则我将无法完全解码文件。正如我在原帖中所说,即使使用 utf-8 我仍然会得到奇怪的字符
【解决方案2】:

Windows 控制台本身并不支持 Unicode(尽管人们对 chcp 65001 有什么看法)。它旨在向后兼容,因此仅支持 8 位字符集。

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

启用它的最佳方法是在您的 usercustomize 脚本中,因此默认情况下在您的计算机上启用它。

【讨论】: