前提
这里暂时要求使用者知道源文件是什么编码
尽管Python中可能有猜测的函数,但是不保证字数少时不出差错
单个
emacs中
先正常显示
1 2
| M-x revert-buffer-with-coding-system gbk [ENTER]
|
该方法也能用于猜测文件是什么编码,由于使用地区的限制,能够有的文件编码格式本身不多
中国
日本
标准
然后设置保存文件所用编码
1 2
| M-x set-buffer-file-coding-system utf-8 [ENTER]
|
Python
1 2 3 4 5 6 7
| file=open(name,'r') content=file.read() newcontent=content.decode('shift-jis').encode('utf-8') file.close() newfile=open(newname,'w') newfile.write(newcontent) newfile.close()
|
shell
1
| iconv -f GBK -t UTF-8 file1 -o file2
|
使用
查看支持的编码列表
批量
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import os import sys input=sys.argv[1]
rootdir =os.path.abspath(input) list=[] for parent,dirnames,filenames in os.walk(rootdir): for dirname in dirnames: list.append(os.path.join(parent, dirname)) for filename in filenames: list.append(os.path.join(parent, filename)) for name in list: print name print for name in list: newname=rootdir+'_edited'+name.split(rootdir)[1] if os.path.splitext(newname)[1]=='': if not os.path.exists(newname): os.makedirs(newname) print 'created new dir: '+newname else: file=open(name,'r') content=file.read() newcontent=content.decode('shift-jis').encode('utf-8') file.close() newfile=open(newname,'w') newfile.write(newcontent) newfile.close() print newname
|
shell
现在能在文件夹下只有文件时使用循环命令来转换,有文件夹的情况尚未考虑,
进展中