linux查看⽂件的编码格式的⽅法setfileencoding
查看⽂件编码
在Linux中查看⽂件编码可以通过以下⼏种⽅式:
1.在中可以直接查看⽂件编码
:set fileencoding
即可显⽰⽂件编码格式。
如果你只是想查看其它编码格式的⽂件或者想解决⽤Vim查看⽂件乱码的问题,那么你可以在
~/.vimrc ⽂件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim⾃动识别⽂件编码(可以⾃动识别UTF-8或者GBK编码的⽂件),其实就是依照fileencodings提供的编码列表尝试,如果没有到合适的编码,就⽤latin-1(ASCII)编码打开。
2. enca (如果你的系统中没有安装这个命令,可以⽤sudo yum install -y enca 安装 )查看⽂件编码
$ enca filename
filename: Universal transformation format 8 bits; UTF-8
CRLF line terminators
需要说明⼀点的是,enca对某些GBK编码的⽂件识别的不是很好,识别时会出现:
Unrecognized encoding
⽂件编码转换
1.在Vim中直接进⾏转换⽂件编码,⽐如将⼀个⽂件转换成utf-8格式
:set fileencoding=utf-8
2. enconv 转换⽂件编码,⽐如要将⼀个GBK编码的⽂件转换成UTF-8编码,操作如下
enconv -L zh_CN -x UTF-8 filename
3. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
⽐如将⼀个UTF-8 编码的⽂件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
乱码原因:
因为你的⽂件声明为utf-8,并且也应该是⽤utf-8的编码保存的源⽂件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台
直接打印utf-8的字符串当然是乱码了。
解决⽅法:
在控制台打印的地⽅⽤⼀个转码就ok了,打印的时候这么写:
print myname.decode('UTF-8').encode('GBK')
⽐较通⽤的⽅法应该是:
import sys
type = filesystemencoding()
print myname.decode('UTF-8').encode(type)
最近利⽤python抓取⼀些⽹上的数据,遇到了编码的问题。⾮常头痛,总结⼀下⽤到的解决⽅案。
linux中vim下查看⽂件编码的命令 set fileencoding
python中⼀个强⼒的编码检测包 chardet ,使⽤⽅法⾮常简单。linux下利⽤pip install chardet实现简单安装
1 2 3 4import chardet
f =open('file','r')
fencoding=chardet.ad()) print fencoding
  fencoding输出格式 {'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判断是否为某种编码的概率。⽐较准确的结果了。输⼊参数为str类型。
了解python中str的编码后可以利⽤decode和encode来实现编码的转换。
⼀般流程是str利⽤decode⽅法根据str的编码将其解码为unicode字符串类型,然后利⽤encode根据特定的编码将unicode字符串类型转换为特定的编码。python中str和unicode属于两种不同的类型,如下。
⼀般情况下window默认编码gbk,linux默认编码utf8
python编程中系统编码,python编码,⽂件编码的概念。
系统编码:默认写源码的编辑器的编码⽅式。它代表源码⽂件内的所有内容都是根据词⽅式编码成⼆进制码流。存⼊到磁盘中的。linux 下通过locale命令查看。
python编码:指python内设置的解码⽅式。如果不设定的话,python默认的是ascii解码⽅式。如果python源代码⽂件中不出现中⽂的话,这个地⽅怎么设定应该不会问题。
设定⽅法:在源码⽂件开头(⼀定是第⼀⾏):#-*-coding:UTF-8-*-,源码⽂件的设置解码⽅式是UTF-8 或者
1 2 3import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
⽂件编码:⽂本的编码⽅式,linux下vim利⽤set fileencoding查看。
⼀般情况下输出乱码的原因就是没有按照系统解码的⽅式进⾏编码。
⽐如print s, s类型为str,linux系统下系统默认编码为utf8编码,s在输出前就应该编码为utf8。如果s为gbk编码就应该这样输出。print
s.decode('gbk').encode('utf8')才能输出中⽂。
linux系统vim编辑器window下⾯情况相同,window默认编码为gbk编码,所以s输出前必须编码为gbk。
python处理中⼀般处理unicode类型。这样输出前直接编码即可。
(2)fileencoding: Vim 中当前编辑的⽂件的字符编码⽅式,Vim 保存⽂件时也会将⽂件保存为这种字符编码⽅式 (不管是否新⽂件都如此),⽹上是这样介绍的,但是我这样做在.vimrc中定义为utf-8似乎没有作⽤,只能在打开vim⽂件时⼿动设置才会起效,不知道什么原因。
(3)fileencodings: Vim 启动时会按照它所列出的字符编码⽅式逐⼀探测即将打开的⽂件的字符编码⽅式,
并且将 fileencoding 设置为最终探测到的字符编码⽅式。因此最好将 Unicode 编码⽅式放到这个列表的最前⾯,将拉丁语系编码⽅式 latin1 放到最后⾯。
(4)termencoding: Vim 所⼯作的终端 (或者 Windows 的 Console 窗⼝) 的字符编码⽅式。这个选项在 Windows 下对我们常⽤的 GUI 模式的gVim ⽆效,⽽对 Console 模式的 Vim ⽽⾔就是 Windows 控制台的代码页,并且通常我们不需要改变它。
系统locale是utf-8(很多linux系统默认的locale形式),编辑的⽂档是GB2312或GBK形式的(Windows记事本
默认保存形式,⼤部分编辑器也默认保存为这个形式,所以最常见),终端类型utf-8(也就是假定客户端是putty类的unicode软件)
则vim打开⽂档后,encoding=utf-8(locale决定的),fileencoding=latin1(⾃动编码判断机制不准导致的),termencoding=空(默认⽆需转换term编码),显⽰⽂件为乱码。
解决⽅案1:⾸先要修正fileencoding为cp936或者euc-cn(⼆者⼀样的,只不过叫法不同),注意修正的⽅法不是:set
fileencoding=cp936,这只是将⽂件保存为cp936,正确的⽅法是重新以cp936的编码⽅式加载⽂件为:
edit
++enc=cp936,可以简写为:e ++enc=cp936。
但是这样做,⽂件关闭后重新打开⼜要重新设置⼀遍。出现乱码归根结底的原因是vim不能识别该⽂件的编码⽅式,导致不能正常解码(不知道是不是叫解码,我的理解)。所以,我在.vimrc中设置了fileencodings,相当于告诉vim当以utf-8解码⽂件不成功时以这么⼏种⽅式尝试,set fileencoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936,latin1. 这样打开正常了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。