① 用shell编写python脚本,脚本中的中文都是乱码(中文注释也是乱码)

第一,查看系统字符集,命令行下输入:locale查看是否utf8,如不是,可以输入:export LANG=en_US.UTF-8
export LANG_ALL = en_US.UTF-8
第二,python文件头部声明:# coding: utf-8

② python命令行输入中文乱码怎么办

python2.X,代码中指抄定了UTF-8,但是在cmd命令行窗口袭时,打印的中文仍然会乱码。

在python3不存在该问题

运行结果:

原因

中文windows默认的输出编码为gbk ,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。

相关推荐:《Python基础教程》

解决方法

有如下两种方法可以解决这个问题

方法一

我们可以通过先把中文解码为unicode,然后再转化为gbk来解决这个问题:

修改后运行结果:

方法二

当然,我们也可以通过改变cmd命令行窗口的输出格式来解决这个问题:

·chcp 65001 就是换成UTF-8代码页

·chcp 936 可以换回默认的GBK

但是这样就降低了脚本的兼容性,在其他环境运行的时候可能还会出现这样的错误,而且可能会影响其他脚本运行,所以推荐使用第一种方法。

③ python command乱码怎么解决

python command乱码怎么解决?具体方法如下:

相关推荐:《Python教程》

先引入import sys

再加一句:type=sys.getfilesystemencoding()

然后在输出乱码的数据的后面加上“.decode('utf-8').encode(type)”。

比如输入“ss”乱码。

就写成print ss.decode('utf-8').encode(type)即可。

④ 为什么Python脚本中的中文在CMD中输入为乱码

你可以查看一下你的脚本的编码格式是否和你cmd环境的编码格式一致. windows环境下使用gb2312
python脚本中如果使用utf-8的话,则增加
# -*- coding: utf-8 -*-

在脚本中可以修改你的编码格式, 方法如下:
sys.getdefaultencoding()
reload(sys)
sys.setdefaultencoding('UTF-8')
sys.getdefaultencoding()
这里的'utf-8'就是你设置的默认格式. 你可以进行修改为与系统一致的格式.例如:GB2312

⑤ python显示乱码

多次被python的编码/乱码问题困扰,相信pythoner们都被困扰过,网上铺天盖地的资料太多也参差不齐,就整理了下。本文从使用的角度系统总结了python编码相关的一些概念,将本文的例子玩一遍,基本上对python的编码问题就清楚了。
首先明确几个概念:
字节流:以utf8/gbk等编码编码的字节流。
unicode对象:python代码中,a=u'中国', 或者a='中国'.decode()的结果。
terminal用于显示字符的编码:将一个用utf8/gbk编码的字节流通过terminal指定的编码,去查找对应的字符显示出来。
locale:linux下,Locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]. 所以说呢,locale总是和一定的字符集相联系的。比如:zh_CN.GB2312
编码转换原则:unicode是”中介”,任何编码之间转换都需要先decode()到unicode。
针对python,先把结论放在前面,三点:
#coding:utf-8 #.py文件是什么编码就需要告诉python用什么编码去读取这个.py文件。
sys.stdout.encoding,默认就是locale的编码,print会用sys.stdout.encoding去encode()成字节流,交给terminal显示。所以locale需要与terminal一致,才能正确print打印出中文。
sys.setdefaultencoding(‘utf8’),用于指定str.encode() str.decode()的默认编码,默认是ascii。
对编码字符串a,代码中可以直接写a.encode(“gbk”),但事实上内部自动先通过defaultencoding 去decode成unicode之后再encode()的。
str(xxx)应该也是用这个去编码的。
'ascii' codec can't encode characters in position 7-8: ordinal not in range(128)print的时候出现这个错误一般可以使用这个方案去处理。
为了避免代码中到处都要去encode(“xxx”),还有可能不同的地方写得不一样带来不一致的情况,推荐使用这个:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
例子1:
在python中,unicode vs 字节流:字节流可以从unicode encode得到,unicode可以从utf8/gbk等编码的字节流decode得到。
分析下面这段代码,终端/locale分别为不同编码的情况:
#coding:utf-8 #由于.py文件是utf-8的,所以必须有这一句
import sys
import locale
import os
import codecs
reload(sys)
print sys.getdefaultencoding() + " - sys.getdefaultencoding()"
sys.setdefaultencoding('utf8') #影响encode()
print sys.getdefaultencoding() + " - sys.getdefaultencoding()"
print sys.stdout.encoding + " - sys.stdout.encoding:"
#sys.stdout = codecs.getwriter('utf8')(sys.stdout) #影响print
print sys.stdout.encoding + " - sys.stdout.encoding:"
u = u'中国'
print u + " - u"
a = '中国'
print a + " - a"
print a.decode('utf-8') + " - a.decode('utf-8')"
print a.decode('utf-8').encode('gbk') + " - a.decode('utf-8').encode('gbk')"
print a.decode('utf-8').encode('utf-8') + " - a.decode('utf-8').encode('utf-8')"
print a.decode('utf-8').encode() + " - a.decode('utf-8').encode()"
print (sys.stdout.encoding) + " - (sys.stdout.encoding)"
print (sys.stdout.isatty())
print (locale.getpreferredencoding())
print (sys.getfilesystemencoding())
—终端为UTF-8,locale为zh_CN.GBK—————–
ascii - sys.getdefaultencoding()
utf8 - sys.getdefaultencoding()
GBK - sys.stdout.encoding:
GBK - sys.stdout.encoding:
?й? - u
中国 - a
?й? - a.decode('utf-8')
?й? - a.decode('utf-8').encode('gbk')
中国 - a.decode('utf-8').encode('utf-8')
中国 - a.decode('utf-8').encode()
GBK - (sys.stdout.encoding)
True
GBK
utf-8
—终端为UTF-8,locale为zh_CN.UTF-8—————–
ascii - sys.getdefaultencoding()
utf8 - sys.getdefaultencoding()
UTF-8 - sys.stdout.encoding:
UTF-8 - sys.stdout.encoding:
中国 - u
中国 - a
中国 - a.decode('utf-8')
?й? - a.decode('utf-8').encode('gbk')
中国 - a.decode('utf-8').encode('utf-8')
中国 - a.decode('utf-8').encode()
UTF-8 - (sys.stdout.encoding)
True
UTF-8
utf-8
—终端为GBK,locale为zh_CN.GBK—————–
ascii - sys.getdefaultencoding()
utf8 - sys.getdefaultencoding()
GBK - sys.stdout.encoding:
GBK - sys.stdout.encoding:
中国 - u
涓???? - a
中国 - a.decode('utf-8')
中国 - a.decode('utf-8').encode('gbk')
涓???? - a.decode('utf-8').encode('utf-8')
涓???? - a.decode('utf-8').encode()
GBK - (sys.stdout.encoding)
True
GBK
utf-8
—终端为GBK,locale为zh_CN.UTF-8—————–
ascii - sys.getdefaultencoding()
utf8 - sys.getdefaultencoding()
UTF-8 - sys.stdout.encoding:
UTF-8 - sys.stdout.encoding:
涓???? - u
涓???? - a
涓???? - a.decode('utf-8')
中国 - a.decode('utf-8').encode('gbk')
涓???? - a.decode('utf-8').encode('utf-8')
涓???? - a.decode('utf-8').encode()
UTF-8 - (sys.stdout.encoding)
True
UTF-8
utf-8
例子1总结,对print而言:
unicode的数据如果要显示正常,必须终端与locale一致。sys.stdout.encoding这个值应该来自locale,print会以sys.stdout.encoding去encode并输出到字节流。
encode为终端编码的字节流就能显示正常,无论locale是啥。
最终是terminal通过terminal配置的编码规则去解码成对应的字符并显示出来。
例子2:
关于sys.setdefaultencoding(‘utf8’)的例子:
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
print sys.getdefaultencoding() + " - sys.getdefaultencoding()"
a = '中国'
print a + " - a"
print a.encode("gbk") #并不是直接从utf8的字节流转化到gbk的,而是通过defaultencoding decode之后才转的。
print a.decode() #使用默认的defaultencoding
print a.encode() #使用默认的defaultencoding
关于str()和repr()
str()是对各种类型转化成str,如果本来是encoded字符串,则不变,如果为unicode,会encode()
repr()对字符串是将字节流出二进制的值以16进制转化为可见字符。
测试环境locale为GBK
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
a = u'中国'
print a
print str(a)
print repr(a)
print repr(a.encode("utf-8"))
print repr(a.encode("gbk"))
中国
涓????
u'\u4e2d\u56fd'
'\xe4\xb8\xad\xe5\x9b\xbd'
'\xd6\xd0\xb9\xfa'
再深挖下去,还有repr()和eval()的关系,就不深挖了。
关于终端和服务器的编码
另外补充一些关于终端和服务器编码的结论:
1. 对mac iterm2,如果server的locale与mac本地终端的locale一致,才能保证server端与本地的表现一致。
2. cat a.py #就把文件显示出来,就是给terminal一串字节流。terminal根据设置的终端编码规则来显示字符。所以只要文件编码与terminal一致即可,与locale无关。
3. cat a.txt > b.txt #无论locale怎么样,只跟a.txt原来的编码相关
4. echo “中国年过” > a.txt #这个情况下,只有terminal与locale的编码一致,你才能在终端shell打出正确的中文~~~所以a.txt与两者都会一致

⑥ python IDLE 控制台输出乱码问题怎样解决

在源代码开始处加上如下这句:

# -*- coding: GBK -*-

...... 其他 Python 源代码 ......

然后,选择 IDLE 的菜单 Options ->
Configure IDLE... 打开 IDLE 的配置选项,切换到 General 选项卡,找到 Default Source
Encoding 设置项,选中 Locale-defined 选项,点击 Apply 按钮,再点击 OK 以便保存设置。

关闭退出 IDLE 并重写打开 IDLE 集成开发环境,此时你再试一下:

⑦ python 中文乱码问题

乱码原因:
因为你的文件声明为utf-8,并且也应该是用utf-8的编码保回存的源文件。但是windows的本答地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了。

解决方法:
在控制台打印的地方用一个转码就ok了,打印的时候这么写:
print myname.decode('UTF-8').encode('GBK')

比较通用的方法应该是:
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)

⑧ python window 命令行返回结果乱码怎么解决

解决方法如下:
print u"你好".encode("GBK")
默认的终端编码是和系统编码一致的,这时就需要encode为对应的编码来显示。

⑨ python中文显示乱码,已经在开头有了coding: utf-8

乱码原因:
因为你的文件声明为 utf-8,并且也应该是用 utf-8 的编码保存的源文件。但是 windows 的本地回默认编码是 cp936,也就答是 gbk 编码,所以在控制台直接打印 utf-8 的字符串当然是乱码了。

解决方法:

py文件用记事本打开,另存为utf-8格式即可

⑩ python3 中文输出乱码问题

python 3和2很大区别就是python本身改为默认用unicode编码。
字符串不再区分"abc"和u"abc", 字符串"abc"默认就是unicode,不再代表本地编内码、
由于有这种内容部编码,像c#和java类似,再没有必要在语言环境内做类似设置编码,比如“sys.setdefaultencoding”;
也因此也python 3的代码和包管理上打破了和2.x的兼容。2.x的扩展包要适应这种情况改写。

另一个问题是语言环境内只有unicode怎么输出gbk之类的本地编码。

答按惯例都在(序列化)输出时才转换成本地编码。
比如

file.write("GBK的中文".encode("GBK"))

python环境内字符串用str.encode("GBK")方法输出成字节串用于和其他环境交流。