Python open("x", "r") 函数,我如何知道或控制文件应该具有哪种编码?

2024-04-02

如果 python 脚本使用open("filename", "r")函数打开并随后读取文本文件的内容,我如何知道该文件应该具有哪种编码?

请注意,由于我是从自己的程序执行此脚本,因此如果有任何方法可以通过环境变量来控制它,那么这对我来说就足够了。

顺便说一句,这是 Python 2.7。

有问题的代码来自 Mercurial,它可以提供一个文件列表,例如通过磁盘上的文件添加到存储库,而不是在命令行上传递它们。

所以基本上,而不是这个:

hg add A B C

我可以将 A、B 和 C 写入一个文件,每个文件之间有换行符,然后执行以下命令:

hg add listfile:input.txt

最终读取该文件的代码是这样的:

files = open(name, 'r').read().split(delimiter)

因此我的问题。当我询问应该使用哪种编码时,IRC 上给出的答案是:

它与传递文件参数时在命令行上使用的编码相同

我认为这意味着它与我执行 Mercurial (hg) 时“使用”的编码相同。由于我不知道那是哪种编码,所以我只是将所有内容都交给 .NET Process 对象,我在这里询问。


你不能。读取文件与其编码无关;您需要提前知道编码才能正确解释您读入的字节。

例如,如果您知道文件采用 UTF-8 编码:

with open('filename', 'rb') as f:
    contents = f.read().decode('utf-8-sig')    # -sig deals with BOM, if present

或者,如果您知道该文件仅为 ASCII:

with open('filename', 'r') as f:
    contents = f.read()    # results in a str object

如果你确实不知道文件的编码,那么显然不能保证你可以正确读取它;但是,您可以使用类似的工具猜测编码chardet http://chardet.feedparser.org/.

UPDATE:

我想我现在明白你的问题了。我以为您有一个需要为其编写代码的文件,但似乎您有一个需要为其编写文件的代码;-)

有问题的代码可能只能正确处理纯 ASCII(字符串可能稍后会被转换,但我认为不太可能)。因此,您需要创建一个仅包含 ASCII(代码点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python open("x", "r") 函数,我如何知道或控制文件应该具有哪种编码? 的相关文章

随机推荐

  • 从 CDN JS 导入 firebase firestore 不起作用

    我正在从 CDN 导入 Firebase Firestore 以在本地服务器上运行 我按照文档所述将其导入 就在这里 https firebase google com docs web alt setup https firebase g
  • 我应该如何使用 Hibernate 从 JPQL 查询引用内部枚举(在实体内定义)?

    我有一个实体类如下 package stuff Entity class Thing Id GeneratedValue private Long id Basic Enumerated private State state public
  • 如果不存在则创建文件夹路径(从 VBA 保存)

    我在工作表中有一个项目列表 如下所示 我的代码遍历每一行并对供应商进行分组 并将一些信息复制到每个供应商的工作簿中 在此场景中 有 2 个唯一的供应商 因此将创建 2 个工作簿 这有效 接下来我想将每个工作簿保存在特定的文件夹路径中 如果文
  • 带有 nginx 的网络服务器一直工作到创建 .save 文件

    在过去 48 小时内到处进行谷歌搜索以找出为什么我的服务器突然停止工作后 最后 我自己找到了答案 我决定将其发布在这里 供那些在整个周末都在谷歌上搜索如此琐碎事情的人使用 在 nginx 上加载了所有内容 LEMP 工作完美 但后来我尝试进
  • Excel 中的数据整理 - 重新排列列和行

    我有一个巨大的 Excel 数据集 我想重新排列行和列 这是数据的片段 它看起来是什么样子以及我希望它看起来是什么样子 Area Channel Unit Year1 Year2 Year3 Year4 bel dc share 25 36
  • 使用 java11 构建和部署 javafx 应用程序

    我按照以下步骤操作https blog jetbrains com idea 2013 03 packaging javafx 2 applications in intellij idea 121 https blog jetbrains
  • 为什么 SQL Server SET DEADLOCK_PRIORITY HIGH 不被遵守?

    我捕获了 SQL Server 2012 死锁图 使用盖尔 肖的 https www red gate com simple talk sql performance sql server deadlocks by example 查询 显
  • MongoDB C# 连接/断开(官方驱动程序)

    请告诉我如何通过官方 C 驱动程序连接 断开到 MongoDB 问题很简单 乍一看问题很微不足道 但是 1 我是否需要自己调用Disconnect方法 或者它会被诸如Dispose之类的方法关闭 2 每次需要向Mongo发出请求时都需要连接
  • statsmodel 预测开始和结束索引

    我正在尝试实现 statsmodel 包中的预测功能 prediction results predict start 1 end len test exog test 输入 测试和输出预测的日期不一致 前者为2012年1月4日至2012年
  • getter 和 setter 的 Google 样式指南属性

    我对其中的一项建议感到好奇有关属性的 Google Python 风格指南 https google github io styleguide pyguide html Properties 他们在其中给出了以下示例 class Squar
  • SQLite 与 Android NDK

    是否可以在 Android 手机上将 SQLite 与 C 结合使用 我还没有找到任何关于如何实现这一点的文档 只需从以下位置下载 SQLite3 合并源文件 http www sqlite org download html http w
  • 如何将 Xcode 项目转换为使用 ARC(自动引用计数)?

    当我运行 Convert to Obj C 时 它首先运行预检查 我希望预检查忽略一些文件 并且我认为可以在这些文件上设置编译器标志 fno objc arc 但预检查阶段似乎忽略了该标志 并重置了它 所以我真的不知道如何超越预检查 预检查
  • 按名称调用 Django celery 任务

    我需要从models py调用一个celery任务 在tasks py中 唯一的问题是 tasks py导入models py 所以我无法从models py导入tasks py 有没有什么方法可以仅使用名称来调用 celery 任务 而无
  • 将多个数组作为参数传递给 Bash 脚本?

    我看过 但只看到了脚本中传递的一个数组的答案 我想将多个数组传递给 bash 脚本 该脚本将它们分配为单独的变量 如下所示 myScript sh array1 array2 array3 这样 var1 array1 and var2 a
  • Java 和 C++ 中的简单变量

    我在一些资料中看到这样一句话 在 Java 中 简单数据类型 例如 int 和 char 的运行方式与 C 中一样 我想知道 Java 和 C 中它们实际上是不同的 在C 中 像Java中的基元这样的简单变量也被分配了一个内存地址 因此C
  • 使用 SQL 获取每小时统计信息

    我们有一张桌子 名字 员工注册 有字段 employeeNo employeeName Registered on Here 注册日期是一个时间戳 我们要求在几天内按小时进行注册 例如 08 年 1 月 1 日 12 点 下午 1 点 15
  • C# 为 ++ 运算符生成 IL - 前缀/后缀表示法何时以及为何更快

    由于这个问题是关于增量运算符和前缀 后缀表示法的速度差异 我将非常仔细地描述这个问题 以免 Eric Lippert 发现它并激怒我 有关我为什么要问的更多信息和更多详细信息 请访问http www codeproject com KB c
  • Silverlight:拉伸到 StackPanel 中的剩余空间

    我有一个带有两个元素的垂直 StackPanel 一个按钮和一个列表框 如何让列表框拉伸到剩余页面高度
  • 将一个 Artifactory 连接到另一个 Artifactory

    我们的设置包括一个全公司范围的 Artifactory 它保存内部构建的工件 并出去获取公开可用的工件 我正在尝试在我们的位置建立一个本地 Artifactory 它将通过常规互联网获取公开可用的工件 但会连接到公司范围内的 Artifac
  • Python open("x", "r") 函数,我如何知道或控制文件应该具有哪种编码?

    如果 python 脚本使用open filename r 函数打开并随后读取文本文件的内容 我如何知道该文件应该具有哪种编码 请注意 由于我是从自己的程序执行此脚本 因此如果有任何方法可以通过环境变量来控制它 那么这对我来说就足够了 顺便