解决Windows下python中文乱码问题

在windows的环境下使用Python有时面临一个问题,那就是处理中文时出现乱码的问题,下面举个例子:

s1 = "中文文本"
fr = open('in.txt')
s2 = fr.readline()
fr.close()

print "s1: ", s1
print "s2: ", s2

if s1 == s2:
    print "s1: ", s1, "等于", "s2: ", s2
else:
    print "s1: ", s1, "不等于", "s2: ", s2

这个脚本中,s1和s2是两个中文字符串,其中s1直接由脚本给出,而s2的值从下面的文件读得:


将它们各自的内容输出,然后比较两个字符串,看看它们是否相等。

虽然它们的文本内容是相同的,但是运行了这个脚本之后却得到了如下结果:


这就是其编码方式不同造成的,我们可以在python shell中看它们各自的编码:


造成这个问题的原因是,windows系统的默认编码系统是GBK,而python解释器的默认编码系统是UTF-8。

这样一来,由于s1是直接由代码给出,因此s1的编码方式是UTF-8,而s2由文件读得,所以s2的编码方式是GBK。

(值得一提的是,windows同样可以正常显示UTF-8编码的文件,而gbk编码的字符串,python解释器也可以将其正常的输出,但是互相比较就不行)

要解决上面的问题也非常简单:


上面的指令中s3为s2用GBK解码之后的结果得到的是“测试文本”这个字符串的标准Unicode表示法,而s4是s3经过UTF-8编码之后的结果,得到的是该Unicode的字节码。可以看到s4此时就和s2的值是一样的了。

所以要比较s2和s1,需要进行转码:


这样一来,输出就是两者相等:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值