Python 的 sys.getdefaultencoding() 是如何使用的?
How is Python's sys.getdefaultencoding() used?
Python 的默认编码让我感到困惑。
文本文件内容中有一个 á 字符。
该文件在记事本中另存为 UTF-8。
当我没有指定 encoding='utf-8' in:
with open(filename,encoding='utf-8') as f:
for line in f:
print(line)
它显示为 ¡。
当我添加 encoding='utf-8' 部分时,它显示为 á.
我想知道 sys.getdefaultencoding() 有什么用,因为它显示的是 utf-8,但我仍然必须指定 utf-8 作为 á 的编码才能显示在输出中。
我正在使用 Python3.
额外编辑:
我认为使用的编码可能是 latin-1 扩展。自从:
á 在 utf-8 中映射到 0xC3 0xA1,在 latin-1 扩展中:0xC3 映射到 Ã 0xA1 映射到 ¡
如何验证在未指定编码时将使用 latin-1 扩展?
阅读 Built-in Functions -> open() 中的文档:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
…
In text mode, if encoding is not specified the encoding used
is platform dependent: locale.getpreferredencoding(False)
is
called to get the current locale encoding.
…
其中 locale.getpreferredencoding(do_setlocale=True)
Return the encoding used for text data, according to user preferences.
sys.getdefaultencoding()
不同(和独立):
Return the name of the current default string encoding used by the
Unicode implementation.
Python 的默认编码让我感到困惑。
文本文件内容中有一个 á 字符。 该文件在记事本中另存为 UTF-8。 当我没有指定 encoding='utf-8' in:
with open(filename,encoding='utf-8') as f:
for line in f:
print(line)
它显示为 ¡。 当我添加 encoding='utf-8' 部分时,它显示为 á.
我想知道 sys.getdefaultencoding() 有什么用,因为它显示的是 utf-8,但我仍然必须指定 utf-8 作为 á 的编码才能显示在输出中。
我正在使用 Python3.
额外编辑:
我认为使用的编码可能是 latin-1 扩展。自从: á 在 utf-8 中映射到 0xC3 0xA1,在 latin-1 扩展中:0xC3 映射到 Ã 0xA1 映射到 ¡
如何验证在未指定编码时将使用 latin-1 扩展?
阅读 Built-in Functions -> open() 中的文档:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
…
In text mode, if encoding is not specified the encoding used is platform dependent:locale.getpreferredencoding(False)
is called to get the current locale encoding.
…
其中 locale.getpreferredencoding(do_setlocale=True)
Return the encoding used for text data, according to user preferences.
sys.getdefaultencoding()
不同(和独立):
Return the name of the current default string encoding used by the Unicode implementation.