python总结(二):控制台中文乱码的解决办法

在编写bash终端应用程序中,如果字符串里含有中文字符,可能会出现乱码。

这里以Win 10为例进行代码测试,utf8.py的内容如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
value = '蚁方阵'
print value

以Windows的CMD终端运行代码:

python utf8.py
# 输出 铓佹柟闃 乱码

至于乱码的原因,因为python文件的编码为UTF-8,而CMD终端的解码格式为GBK,所以出现乱码,详细的分析过程见《JAVA总结(二):字符的编码与解码》

解决办法很简单,必须要以文件的方式进行解码,然后以输出终端进行编码,如下:

value = '蚁方阵'
print value.decode('UTF-8').encode('GBK')

现在控制端输出终于正常,不过需要注意的是,不同的终端采用的解码方式也不一样,所以即使是在同一台机器上,不同的终端也可能出现不同的结果,以我的测试为例,在MINGW64上,第一段代码输出无乱码,windows自带CMD控制台则出现乱码,执行编码与解码过程后,则刚好相反。

除了上述的解决办法,还可以直接在代码中写入UTF-8字符,如下:

# '蚁方阵'的UTF-8编码
value = ur'\u8681\u65B9\u9635'
# 对UTF-8终端正常
print value.encode('UTF-8')
# 对非UTF-8终端正常
print value

但是依旧存在上面的问题,对于输出为UTF-8的终端显示正常,对输出为GBK编码的终端则为乱码,更有意思的是,上面的第二局输出如果在UTF-8终端上进行测试,还直接报错,如下:

Traceback (most recent call last):
  File "./utf8.py", line 3, in <module>
    print value
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: 
ordinal not in range(128)

结论

解决乱码问题一定要依照输入文件(字符)的编码与输出显示方式的解码,只有掌握了它们之间的转换关系,才能彻底解决乱码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值