linuxpython乱码问题
‘壹’ linux下python元祖中的中文print屏幕上显示乱码,怎么解决
这个并不是乱码,而是因为你输出的是列表。他以编码保存的而已。
你需要
foriinyoulist:
printi
这样出来的结果就是中文了
‘贰’ Redhat的LINUX下使用Python里pyodbc模块插入sql Server数据中文乱码
应该是数据库和python脚本编码方式不一样,你把脚本编码方式改成GBK或GB2312试试。
‘叁’ linux下中文显示乱码怎么解决
linux下经常遇到的编码问题如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。
查看编码的方法
方法一:file filename
方法二:在Vim中可以直接查看文件编码
:set fileencoding
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开
文件编码转换
多方法:
iconv 提供标准的程序和API来进行编码转换;
convert_encoding.py 基于Python的文本文件转换工具;
decodeh.py 提供算法和模块来谈测字符的编码;
linux下文件编码转换:
方法一:
在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8
或者
11)设置文件集合,即要对哪些文件进行操作,可以使用通配符,比如我通常是对 C/C++ 源程序进行编码转换
:args *.h *.cpp
2)给出要在每个文件上执行的命令,这里是转换编码:
:argdo set fenc=utf-8 | update
方法二:
iconv 转换
5.案例:
假如说我们将windows下的一个UTF-8的文件传到linux环境下,linux环境下的系统编码是GB18030,我们cat的时候就会出现乱码,这个时候就应该想到转码了,下面我们来进行试验:
我们将windows下一个名为UTF-8.sh的文件传到linux系统中,其中UTF-8.sh的内容如下:
我是中文编码UTF-8模式~
而linux系统的系统语言设置为:
[root@sor-sys zy]# cat /etc/sysconfig/i18n
LANG=zh_CN.GB18030
SYSFONT="latarcyrheb-sun16"
这个时候查看一下文件的内容及编码:
[root@sor-sys zy]# file UTF-8.sh
UTF-8.sh: UTF-8 Unicode text, with no line terminators
[root@sor-sys zy]# cat UTF-8.sh
锘挎垜鏄?腑鏂囩紪镰乁TF-8妯″纺~[root@sor-sys zy]#
[root@sor-sys zy]#
这个时候我们就需要转换编码了,记得使用iconv
[root@sor-sys zy]# iconv -f UTF-8 -t GB18030 UTF-8.sh -o GB18030.sh
[root@sor-sys zy]# cat GB18030.sh
??我是中文编码UTF-8模式~[root@sor-sys zy]#
[root@sor-sys zy]# file GB18030.sh
GB18030.sh: Non-ISO extended-ASCII text, with no line terminators
[root@sor-sys zy]#
convmv就是更改文件名编码方式的一个工具。
比如
sudo convmv -f gbk -t utf-8 -r –notest /home
就是将/home目录下原来文件名是gbk编码方式的全部改为utf-8格式的。这里 -f 后面为原来的编码方式,-t 后面是要更改为的编码方式, -r 表示这个目录下面的所有文件, –notest 表示马上执行,而不是仅仅测试而已。另外这命令好像要root才能执行,因此要加上 sudo。
‘肆’ python终端输出乱码怎么解决
在命令行终端上工作时,经常会碰到一个头疼的问题就是中文乱码。下面我们就来看一下解决python在终端输出乱码的解决方法。
牵涉编码的地方一共有五处:
Python代码文件前两行声明的编码
Python代码文件实际存储所使用的编码
Vim的显示编码
Linux系统的文件编码
SecureCRT等终端设置的显示编码
严格来讲,五码一致的时候,如果文件没有损坏,应该是能够正常显示了。
Python编码声明:
如果python代码文件中包含中文,就一定要在代码文件的前两行(注意:一定要是前两行)做出编码声明,否则python代码默认采用ASCII保存,这样遇到中文字符就会报错。在代码头部声明编码的方式有三种:
# coding=<encoding name>
# -*- coding: <encoding name> -*-
# vim: set fileencoding=<encoding name>
Vim中有关编码的选项:
在 Vim 中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding 和 termencoding。
Linux系统的编码设置:
Linux的系统编码设置可以通过设置locale来完成,直接在命令行敲locale,然后回车,即可查看当前系统的编码设置,与保存文件相关的设置是LC_CTYPE。
如LC_CTYPE=zh_CN.gb18030,即把系统的编码设置成为了gb18030。
更多Python知识请关注Python自学网
‘伍’ python 中文乱码问题
记事本是用utf-8保存你下载了东西的。你下载下来的不是utf-8,保存下来中文当然就乱码了。而gbk和utf-8里英文的编码值都一样,所以不受影响。
一个方法是你留意下目标页面的charset 和 contentType,另一个方法是你复制一个目标页面的字,放cmd里看它的编码长度,以此来判断它的原来编码。
‘陆’ python 乱码问题
解决方法:
1.直接使用 u'是' 形式,指明以unicode编码,解码方式会以顶部 #coding定义的编码方式,如果不写,以操作系统当前编码方法,建议写上#coding,因为要让操作系统编码和源文件编码经常会不一样。推荐使用这种方式
2.输出时指定解码方法 print '是'.decode("utf8") ,必须和保存的编码一致,忽略#coding的定义
3.将#coding 和保存编码改为和操作系统一样的编码,就可以直接print '是' 正常输出,也不推荐,因为需要事先知道操作系统编码,复制到其他电脑上,操作系统编码不一样就会出错
#coding=gbk
print u'是' #方法1
print '是'.decode("gbk") #方法2
print '是' #方法3
注意:
#coding指明的编码必须和保存的编码一样,不然1,3方法都会产生错误,原因也是保存编码和读取编码不一致。一般IDE能够自动根据#coding保存文件
‘柒’ SUSE Linux乱码问题
解决方案无非就是把python的代码的开头编码用utf-8,打开数据库连接的时候也用charset='utf8',还搞什么sys.setdefaultencoding('gbk'),mysql的my.cnf配置文件里面配置为utf-8。等等之类的东西,无效,插入中文还是乱码,就是插到数据库里面,直接看数据库里的中文都是编码,或者是????什么的。
把问题简单化,mysql的默认编码为latin1,查找mysqldb的源码关键报错的地方是cursor.execute,这里要执行一下encode(charset),既然这里要encode,那就在外面先decode一下,果然什么都不改,在自己的调用函数里做decode。
sql
=
'insert
into
aa
values('测试')'
sql
=
sql.decode('latin1')
cursor.execute(sql)
这样就解决问题了,中文插入,中文显示,在终端命令行直接查看数据库也是中文。
试试,建表的时候不需要指定编码。
‘捌’ python中文显示乱码,已经在开头有了coding: utf-8
乱码原因:
因为你的文件声明为 utf-8,并且也应该是用 utf-8 的编码保存的源文件。但是 windows 的本地默认编码是 cp936,也就是 gbk 编码,所以在控制台直接打印 utf-8 的字符串当然是乱码了。
解决方法:
py文件用记事本打开,另存为utf-8格式即可
‘玖’ linux pyinstaller 中文乱码
中文乱码解决办法可以重启python。
首先查看matplotlib字体位置,然后上传字体到服务器,之后删除字体缓存,最后重启python应用即可。
‘拾’ python字符串是乱码怎么办
显示乱码的主要原因是:字符串编码集问题
其原因详细:
Windows 下的字符串编码集为GBK 而我们的Python字符串一般是 UTF-8
代码详情:
#!/usr/bin/python
# coding: utf-8
os_char='gb18030' # 定义转换类型为GB18030
print u"我是字符串" # 直接打印Unicode
print u"我是字符串".encode(os_char) # 转换为GB18030编码
print "我是字符串".decode("utf-8").encode(os_char) # 先转换为UTF-8 再转换为GB18030
备注:
之前的第一行(#!) 为Linux环境下的执行文件声明 如 Bash 的声明为 #!/bin/bash
第二行注明编码集为GB18030
Linux下的编码集为 UTF-8