其中 Py_FileSystemDefaultEncoding 在 python 源代码中设置
where Py_FileSystemDefaultEncoding is set in python source code
我很好奇 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().
派生的
这是我的终端中的语言环境命令输出:
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 的源代码中有两个地方:
bltinmodule.c
在 Windows 和 OS X 上指定 Py_FileSystemDefaultEncoding
Py_InitializeEx()
sets it on other Unix systems -- 注意:setlocale(LC_CTYPE, "")
在 nl_langinfo(CODESET)
之前调用,在 setlocale(LC_CTYPE, saved_locale)
之后恢复。
Can you give me some advice how to search some keywords in python 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 *= RET
和 M-,
继续搜索。
我很好奇 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().
这是我的终端中的语言环境命令输出:
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 的源代码中有两个地方:
bltinmodule.c
在 Windows 和 OS X 上指定 Py_InitializeEx()
sets it on other Unix systems -- 注意:setlocale(LC_CTYPE, "")
在nl_langinfo(CODESET)
之前调用,在setlocale(LC_CTYPE, saved_locale)
之后恢复。
Py_FileSystemDefaultEncoding
Can you give me some advice how to search some keywords in python 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 *= RET
和M-,
继续搜索。