其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置

2024-04-28

我很好奇python源代码如何设置Py_FileSystemDefaultEncoding的值。我收到了一件奇怪的事情。

自从Pythondoc https://docs.python.org/2/library/sys.html#sys.getfilesystemencoding关于 sys.getfilesystemencoding() 说:

在 Unix 上,编码是用户根据 nl_langinfo(CODESET) 结果的偏好,如果 nl_langinfo(CODESET) 失败则为 None。

我使用Python 2.7.6

```

>>>import sys
>>>sys.getfilesystemencoding()
>>>'UTF-8'
>>>import locale
>>>locale.nl_langinfo(locale.CODESET)
>>>'ANSI_X3.4-1968'

```
问题是:为什么 getfilesystemencoding() 的值与 locale.nl_landinfo() 的值不同,因为文档说 getfilesystemencoding() 是从 locale.nl_landinfo() 派生的。

这是我的终端中的区域设置命令输出:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=

概括:sys.getfilesystemencoding()行为如记录的那样。混乱是由于之间的差异setlocale(LC_CTYPE, "")(用户的首选项)和默认的 C 语言环境。


该脚本始终以默认的 C 语言环境开头:

>>> import locale
>>> locale.nl_langinfo(locale.CODESET)
'ANSI_X3.4-1968'

But getfilesystemencoding()使用用户的区域设置:

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
>>> locale.setlocale(locale.LC_CTYPE, '')
'en_US.UTF-8'
>>> locale.nl_langinfo(locale.CODESET)
'UTF-8'

空字符串作为区域设置名称根据用户选择的适当环境变量来选择区域设置 http://www.gnu.org/software/libc/manual/html_node/Setting-the-Locale.html.

$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())'
ANSI_X3.4-1968
$ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())'
UTF-8

我在哪里可以找到有关设置 Py_FileSystemDefaultEncoding 的源代码。

Python 2.7的源代码中有两个地方:

  • bltinmodule.c https://hg.python.org/cpython/file/2.7/Python/bltinmodule.c#l17指定Py_FileSystemDefaultEncoding在 Windows 和 OS X 上
  • Py_InitializeEx()在其他 Unix 系统上设置它 https://hg.python.org/cpython/file/2.7/Python/pythonrun.c#l283- 注意:setlocale(LC_CTYPE, "")之前被调用nl_langinfo(CODESET)并恢复回来setlocale(LC_CTYPE, saved_locale) after.

你能给我一些如何在 python 源代码中搜索某些关键字的建议吗

要找到这些地方:

  • 克隆Python 2.7源代码 https://docs.python.org/devguide/:

    $ hg clone https://hg.python.org/cpython && cd cpython
    $ hg update 2.7
    
  • 搜索Py_FileSystemDefaultEncoding *=在编辑器中输入正则表达式,例如:

    $ make TAGS # to create tags table
    

    在 Emacs 中:M-x tags-search RET Py_FileSystemDefaultEncoding *= RET and M-,继续搜索。

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

其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置 的相关文章

随机推荐

  • 组件输入属性上的双向数据绑定

    我正在尝试在 angular2 上做一些事情 但我无法找到有关此行为的信息 我有一个应用程序实现像这样的自定义组件 import Component Input from angular2 core Component selector m
  • 如何将目录结构解析为字典?

    我有目录结构列表 例如 a b a b c a b c d a b c e a b c f g a b c f h a b c f i 我想将它转换成像树结构一样的字典 a b c d None e None f g None h None
  • TwinCAT 3:写入文件

    我想从 PLC 中导出一些数据 方法是将其写入文本文件并将其保存到 USB 记忆棒中 我设法创建了文本文件 但我无法写入任何内容 我在以下代码中使用 TwinCAT 标准库中的函数 PROGRAM P WriteFile VAR nStat
  • Yii框架2.0添加媒体打印到css链接

    使用 Yii 框架 2 0 我包含一个 css 文件 其中包含以下代码资产 AppAsset php public css css style css 当我在网络浏览器上检查元素时 我在标题标记中看到以下代码 我想添加打印 css到网页媒体
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 使用as3在第二帧上添加影片剪辑

    如何使用 AS3 类中调用的 addChild 在特定帧上添加影片剪辑 我的问题是如何访问特定的框架 谢谢 棘手的事情是处理帧 实时循环 我会这样做的方式是 添加事件监听器FRAME CONSTRUCTED http help adobe
  • 在系统范围内向 Mac 窗口标题栏添加按钮

    我希望能够添加一个按钮标题栏 https developer apple com design human interface guidelines macos windows and views window anatomy of Mac
  • 文档何时添加到 MongoDB 集合中

    我有一个现有的 mongodb 集合 它没有有关文档创建时间的任何信息 是否可以通过某种方式获取此信息 我已经浏览了文档 但在任何地方都看不到它 如果您使用默认的ObjectId为您的价值 id属性 创建时间被编码在其中 如中所述Objec
  • 如何通过 JavaScript 函数在 HTML5 画布上绘制多边形

    我希望用户能够单击画布上的某个位置 多边形就会出现在上面 div class rounded div
  • Sourcetree/GIT - 拉取时无法锁定引用/引用损坏

    我和一位同事在同一个分支上工作了一周 不断地推送 拉取更改 今天突然 我点击 拉取 以查看是否有任何需要拉取的更改 但出现了错误 顺便说一下 这是在 sourcetree 中的 错误是这样的 git c diff mnemonicprefi
  • 如何在 Scala 3 宏中创建泛型类型的实例?

    我正在将宏从 Scala 2 移植到 Scala 3 作为其工作的一部分 Scala 2 宏使用默认构造函数创建泛型类型的实例 在 Scala 2 中使用准引用很容易做到这一点 但我在 Scala 3 宏上遇到了困难 这是迄今为止我最好的方
  • 正确使用Optional.ifPresent()

    我正在尝试理解ifPresent 的方法OptionalJava 8 中的 API 我有一个简单的逻辑 Optional
  • 帮助加入 Rails 3

    我有以下型号 class Event lt ActiveRecord Base has many action items end class ActionItem lt ActiveRecord Base belongs to event
  • 有丰富的领域模型示例吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个简单的示例来说明使用富域模型的好处 理想情况下 我想要一个之前和之后的代码列表 应该尽可能
  • 如何在 Mac 上的 Sublime Text 2 上运行 C++?

    我尝试在 Mac 上的 Sublime Text 2 上用 C 运行 hello world I typed include iostream int main cout lt lt Hello WOrld return 0 但这给了我一个
  • facebook graph api 确定用户是否喜欢 url

    如果用户当前登录 Facebook 并喜欢当前页面 我想显示不同的消息 我明白 FB Event subscribe edge create function response you like this 当用户喜欢该页面时 它将触发 但是
  • 结合 codeigniter 和 laravel

    我在用着codeigniter框架 但我想使用的功能laravel像下面的代码这样的框架 我可以打印变量而无需 Hello name 我能怎么做 Codeigniter 是一个 PHP 框架 Laravel 也是 php 框架 而这两者并不
  • 在 JS 中的浏览器中输入 url 时,偏移哈希标签链接以调整固定标头

    我希望创建一个页面 允许哈希标签跳转到页面的某些内容 e g http example com page1 http example com page1是一个普通页面 http example com page1 info http exa
  • 如何在iOS中根据文本长度更改UILabel宽度?

    我想在 UILabel 旁边显示图像 但是 UILabel 的文本长度可变 所以我不知道将图像放置在哪里 图像应根据标签的大小移动 我怎样才能做到这一点 虽然 Keshav 答案可以工作 但它已被弃用 try NSDictionary at
  • 其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置

    我很好奇python源代码如何设置Py FileSystemDefaultEncoding的值 我收到了一件奇怪的事情 自从Pythondoc https docs python org 2 library sys html sys get