gpt4 book ai didi

python - 在 python 源代码中设置 Py_FileSystemDefaultEncoding

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:38 25 4
gpt4 key购买 nike

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

自从 python doc关于 sys.getfilesystemencoding() 说:

On Unix, the encoding is the user’s preference according to the result of nl_langinfo(CODESET), or None if the nl_langinfo(CODESET) failed.

我用的是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() 派生的。

这是我终端中的 locale 命令输出:

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'

但是 getfilesystemencoding() 使用用户的语言环境:

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

作为语言环境名称的空字符串 selects a locale based on the user choice of the appropriate environment variables .

$ 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

where can i find the source code about setting Py_FileSystemDefaultEncoding.

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


Can you give me some advice how to search some keywords in python source code

要找到这些地方:

  • clone Python 2.7 source code :

    $ 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 *= RETM-, 继续搜索。

关于python - 在 python 源代码中设置 Py_FileSystemDefaultEncoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com