php 你好 怎么转成 浣犲ソ 了,一个 Python 编码问题,求解

我工作在 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")

conemu 下的结果是:

$ python test.py 你好

你好

浣犲ソ

mintty 下的结果是:

$ python test.py 你好

▒▒▒

你好

问题是,什么导致了这个差异,感觉 mintty 的 None 是不正常的,怎么改成跟 conemu 一样呢?

以及能否不在 python 脚本中更改 stdin 和 stdout 的 encoding,让它们默认都是 utf-8,就像 linux 那样呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值