如何在Python脚本中获取终端编码?

16 投票
3 回答
6707 浏览
提问于 2025-04-16 19:49

假设你想用一些参数来启动一个Python脚本,比如:

python myscript some arguments

我知道,字符串 sys.argv[1]sys.argv[2] 的编码方式是由终端指定的。那么有没有办法在Python脚本内部获取这个信息呢?

我的目标是像这样:

terminal_enocding = some_way.to.GET_TERMINAL_ENCODING
some = `sys.argv[1]`.decode(terminal_encoding)
arguments = `sys.argv[2]`.decode(terminal_encoding)

3 个回答

1

这个函数 locale.getpreferredencoding() 也能完成这个任务。

它会返回一个 Python 的编码字符串,你可以直接这样使用:

>>> import locale
>>> s = b'123\n'
>>> enc = locale.getpreferredencoding()
>>> s.decode(enc)
'123\n'
9

你可以使用 locale.getdefaultlocale() 这个命令,然后取出返回结果中的第二部分。

想了解更多信息,可以查看 这里(这是Fedora的维基页面,解释了Python默认编码的原因和方法)。

27

sys.stdout.encoding 可以告诉你标准输出的编码方式。也就是说,当你在程序中打印东西时,使用的是什么样的字符编码。sys.stdin.encoding 则是用来查看标准输入的编码方式,也就是你在程序中输入内容时,使用的编码是什么。

撰写回答