当前位置: 首页 > 知识库问答 >
问题:

Python打开函数应该使用哪种编码?

甘祺
2023-03-14

在读取包含右双引号 Unicode 符号的文件时,我遇到异常。它以 UTF-8 (0xE2 0x80 0x9D) 编码。最小的例子:

import sys

print(sys.getdefaultencoding())

f = open("input.txt", "r")
r.readline()

即使右引号不在第一行,该脚本也无法读取第一行。异常看起来是这样的:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python36\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 102: char
acter maps to <undefined>

输入文件是utf-8编码的,我尝试过使用和不使用BOM。sys返回的默认编码。getdefaultencoding()是utf-8。

此脚本在使用Python 3.6.5的机器上失败,但在另一台使用Pythin 3.6.0的机器上运行良好。这两台机器都是Windows。

我的问题大多是理论性的,因为这个异常是由我无法更改的外部软件抛出的,并且它读取了我不想更改的文件。除了Python补丁版本,这些机器应该有什么区别?如果系统默认为utf-8,为什么vanilla open使用cp1252?

共有1个答案

商皓
2023-03-14

正如Python的开放文档中明确指出的那样:

在文本模式下,如果未指定编码,则使用的编码取决于平台:locale。调用getpreferredencoding(False)以获取当前区域设置编码。

Windows 默认为本地化编码(美国和西欧版本的 cp1252)。Linux 通常默认为 utf-8

由于它与平台相关,因此请使用编码参数并显式指定文件的编码。

 类似资料:
  • 函数名称: 运行应用 函数功能: 打开一个应用程序 函数方法 flag = app.runApp(bid) 参数 类型 必填 说明 bid string 是 应用包名 返回值 类型 说明 flag boolean true - 运行成功,false - 运行失败 函数用例 --启动设置 flag = app.runApp("com.android.settings") if flag == tr

  • 问题内容: 我正在尝试决定要选择哪种mime类型来返回mp3数据(由php提供) 根据此mime类型列表:http : //www.webmaster-toolkit.com/mime-types.shtml 这些之间有什么区别,我应该使用哪个? 问题答案: 最好的选择是使用RFC定义的 mime-type 。

  • 问题内容: 使用哪些IDE(“ GUI /编辑器”)进行Python编码? 问题答案: 或者,以纯文本格式:(也可以作为aa 屏幕截图获得) 缩略语: 我没有提到语法高亮之类的基础知识,因为我期望默认情况下这些。 这只是一份反映你的反馈和意见的清单,我不主张使用这些工具。当你继续发布答案时,我将不断更新此列表。 PS。你能帮我将上述编辑器的功能添加到列表中吗(例如自动完成,调试等)?

  • 问题内容: 在Python中,元素的编码方式是什么?他们用编码编码吗? sys.getdefaultencoding():返回Unicode实现使用的当前默认字符串编码的名称。 PS :正如一些答案中所指出的,确实是一个更好的 猜测 。但是,我希望看到这个问题的明确答案,并提供可靠来源的指导! PPS :正如Wim指出的那样,Python 3通过将对象放在sys.argv中来解决此问题(如果我理解

  • 本文向大家介绍JavaScript Array#sort()函数使用哪种算法?,包括了JavaScript Array#sort()函数使用哪种算法?的使用技巧和注意事项,需要的朋友参考一下 Javascript规范未指定要在Array.sort实现中使用的特定算法。这留给实现者决定。因此,不同的JS引擎使用不同的排序算法。 Mozilla(Spider Monkey JS引擎)使用mergeSo

  • 问题内容: 我读过我应该用 钱 ,但是在当今快节奏的世界里,现在也许已经过时了。 我应该使用什么? 问题答案: 不,钱应该还是可以的。