【发布时间】:2016-01-14 06:45:13
【问题描述】:
根据手册,open()的默认输入输出编码是“平台相关”,usually由locale.getpreferredencoding()给出。但是这些平台相关的默认值究竟(或大约)是什么?
编辑:一个有用的答案可能是配置列表的形式(可能是操作系统和一些语言/本地化设置的组合)和生成的默认编码。
我并不期待一个完整的参考,但我想知道当我的一个学生偶然发现我可以顺利运行的代码时会发生什么,以及需要考虑哪些因素(我的盒子默认为 @987654329 @)。理想情况下,我可以提前说“如果你的系统设置为 X,你应该做 Y”。
我查看了getpreferredencoding() 的the source 并且可以看到检查了许多环境变量,但是我没有要手动测试的不同机器的动物园——而且我没有了解设置所有这些环境变量的因素。我的学生来自不同的国家(但主要是荷兰人),他们使用 PC、Mac 和 Chromebook。有没有人可以提供我可以期待的概述?
【问题讨论】:
-
"关于我可以运行的代码" -- 如果它是 Python 源代码,那么告诉你的学生使用encoding declaration:
# -*- coding: utf-8 -*-如果他们的源代码使用非 ascii 文字(utf-8 是 Python 3 中的默认值,因此编码声明是可选的)。 -
不,正如问题所说,这是关于使用
open()读取文件而不指定编码的代码。 -
如果您不知道字符编码,请使用二进制模式
'rb'读取文件。否则只能猜测编码(chardet模块)。 -
@JF,我知道如何处理文件及其编码。请阅读这个问题,不要向我解释这个世界。多年来,我们一直在这个网站上相遇,通常是在 Python 问题上。
-
@alexis 在 Windows 上,我认为它是系统代码页 (list)。给定一个采用这些编码之一的文本文件,很难判断使用的是什么编解码器。您应该期望它是 random 和 impossible to guess.
标签: python unicode character-encoding localization