Python2中print字符串含有汉字无法在终端和cmd正确显示怎么办?乱码和编码锦集

Python2正确输出含有汉字的字符串

前言:

这个也是做CSDN爬虫项目中遇到的一个神奇的bug。虽然现在发现,并不是bug,而很可能是我自己的操作失误。
但是这个失误让我从昨天晚上,到现在都在烦躁当中~
一直很好奇,为啥这种最基础的print输出问题,网上就找不到一个契合的解决方案呢?
现在才知道,我出错的方式有点诡异。
不多bb了,直接上代码吧——

demo1

Ubuntu16,Python2,且安装过中文语言什么的。

#!usr/bin/python
# -*- coding: utf-8 -*-
a = "我就是中文啊"
print("a:",a)

输出就是:

('a:', '\xe6\x88\x91\xe5\xb0\xb1\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87\xe5\x95\x8a')

各种尝试,encode和decode,都不行!咦,为啥呢?
后来才知道,Python2和Python3的输出真的不是一样的哎!

Python2中的print加了括号之后,前面有字符串,再加逗号,再加带有中文的字符串变量就是会乱码!

这种组合就是不行,所以只能打破这种组合,比如说下面这种:

#!usr/bin/python
# -*- coding: utf-8 -*-
a = "我就是中文啊"
print a

输出:
这里写图片描述

可以看出来,没有问题

可见并不是Ubuntu的终端不能正确显示中文的问题,而是我的操作不对,但是上面的操作很明显不能满足我的所有要求,我的字符串变量应该要和字符串的说明一起出现,才比较方便观看。
我们来看看接下来的操作:

#!usr/bin/python
# -*- coding: utf-8 -*-
a = "我就是中文啊"
print "a:%s"%a
#这里的操作应该是Python2的正常print了,可惜我一直都用了();
#自以为这样,不管是Python2还是python3都可以处理print函数
#至于%s的意思大家应该清楚,简单解释一下,%类似于取地址,s是string,字符串的意思。和c里面的输出原理类似。

这里的输出如下:

a:我就是中文啊

美滋滋,Ubuntu下是可以解决这样的问题了。

Windows下的情况还是不一样的!

Windows下cmd中python2正确print输出带有汉字的字符串变量

题目起的有点长:
刚开始我在Windows下操作的时候,不管怎么都无法显示中文,就连上面最后一个demo都无法显示。
百度到的答案是,Windows中cmd的自带编码格式不支持utf-8,得在cmd中输入 cp65001,然后我就可以输入下面的代码,得到再下面的输出了:

#!usr/bin/python
# -*- coding: utf-8 -*-
a = "我就是中文啊"
print "a:%s"%a

这时候的输出才是正常的:

a:我就是中文啊

也可以试试下面的操作:
先把cmd设置成cp936,对就是在cmd中输出cp936,然后cmd会支持gbk格式。

a = "我就是中文啊"
print a.decode('utf-8').encode('GBK')

这里的输出就很明显了,会直接显示中文

我就是中文啊

现在发现了最终的奥妙,也就是——如果字符串中有汉字,那么,python2不能加括号!

OK,其实我觉得如果和我一样遇到了这个问题,是很难搜到我这篇博客的,尴尬~
我当时就遇到了同样的问题,很难用关键词去描述,所以关注我吧,关注我不迷路哦,接下来会不断地更新我的学习笔记~

新问题更新:

这个问题还是没有解决,上面说到,如果python2 print的内容既有中文又有英文,那么编码格式应该就会乱,而导致中文乱码,我只好用格式化输出,才能同时显示字符串和有中文字符串的变量。
但是如果列表demo_list = [“我是中文啊”,”我也是ai”]
直接print demo_list,就会乱码
只能

for i in demo_list:
    print i

很是尴尬,不知所措~

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页