我工作在 msys2 环境下,然后发现 mintty 和 conemu 两个终端环境下,python2 的输入、输出编码不一致,而 python3 是一致的。如下:
| | python2 | python2 | python3 |
| | mintty | conemu | both |
| sys.stdin.encoding | None | cp936 | cp936 |
| sys.stdout.encoding | None | cp936 | cp936 |
这两个终端环境的 LANG、Locale 关键变量如下,似乎并无什么区别,也没发现两个软件提供的设置项里什么导致了这个情况:
| | mintty | conemu |
| LANG | zh_CN.UTF-8 | zh_CN.UTF-8@cjknarrow |
| LC_ALL | - | - |
| LC_CTYPE | - | - |
这导致的结果是,mintty 环境下,python2 程序的输入环境编码是 gbk,输出环境编码是 utf-8,比如运行这段代码:
# coding: utf-8
#! /bin/python
import sys
print type(sys.argv[1])
print sys.argv[1].decode("utf-8")
print sys.argv[1].decode("gbk").encode("utf-8")
$ python test.py 你好
<type 'str'>
你好
浣犲ソ
$ python test.py 你好
<type 'str'>
▒▒▒
你好
问题是,什么导致了这个差异,感觉 mintty 的 None 是不正常的,怎么改成跟 conemu 一样呢? 以及能否不在 python 脚本中更改 stdin 和 stdout 的 encoding,让它们默认都是 utf-8,就像 linux 那样呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.