编程地带

python3查看默认编码

2018-11-28  本文已影响0人  MA木易YA

主要用到locale模块,以下为windows上的演示

print(locale.getpreferredencoding())
print(locale.getdefaultlocale())

#输出
cp936
('zh_CN', 'cp936')

扩展

但是在某些系统中,当您调用时getpreferredencoding(),_locale模块会PyDict_SetItemString(string, "letters", ulo);在fixup_ulcase(void)使用以下内容生成它们之后通过调用来覆盖它:

/* create letters string */
n = 0;
for (c = 0; c < 256; c++) {
    if (isalpha(c))
        ul[n++] = c;
}
ulo = PyString_FromStringAndSize((const char *)ul, n);
if (!ulo)
    return;
if (string)
    PyDict_SetItemString(string, "letters", ulo);
Py_DECREF(ulo);

反过来,这被称为PyLocale_setlocale确实setlocale,这被称为getpreferredencoding- 代码http://hg.python.org/cpython/file/07a6fca7ff42/Lib/locale.py#l612

 def getpreferredencoding(do_setlocale = True):
        """Return the charset that the user is likely using,
        according to the system configuration."""
        if do_setlocale:
            oldloc = setlocale(LC_CTYPE)
            try:
                setlocale(LC_CTYPE, "")
            except Error:
                pass
            result = nl_langinfo(CODESET)
            setlocale(LC_CTYPE, oldloc)
            return result
        else:
            return nl_langinfo(CODESET)

避免方式

locale.getpreferredencoding(False)
上一篇下一篇

猜你喜欢

热点阅读