via: http://www.g2w.me/2012/02/python-batch-convert-file-encodings/
今天在 eclipse 中导入了个之前的 swing 项目,结果跑起来后乱码,检查代码发现竟然一部分 java 文件是 utf-8编码,一部分却是 gb2312 的,而文件又比较多,一个一个去看显示太麻烦了,于是又该 python 出手了。
这里需要用到一个 python 的库 chardet 1.0.1 ,用于自动检测文件的编码,使用起来非常方便。
>>> import chardet
>>> chardet.detect(open(r'E:\Workspaces\java\GCHMCreator\main\g2w\app\gchm\gui\ContentElement.java').read())
{'confidence': 0.99, 'encoding': 'GB2312'}
detect文件返回的是一个字典,其中 encoding
的值为检测到的编码类型,confidence
为该编码的符合度,
我需要做这样的事:
- 遍历项目中所有的
.java
文件,并检测其编码
- 备份每个
.java
文件中 .java.bak
以便于恢复
- 将 .java 文件从检测到的编码格式转换成 utf-8 格式
- 提供一个恢复工具,在转换错误后能够恢复到原来的文件
- 提供一个清理工具,在确保文件转换正确后,可以清除备份的文件
其中最关键的部分在第二条,利用 chardet 检测出文件的编码 source_encoding
,将文本内容通过source_encoding
decode
成 unicode ,再利用 codecs 将文件输出成正确的编码格式。
完整代码
#-*- coding: utf-8 -*-
import codecs
import os
import shutil
import re
import chardet
def convert_encoding(filename, target_encoding):
# Backup the origin file.
shutil.copyfile(filename, filename + '.bak')
# convert file from the source encoding to target encoding
content = codecs.open(filename, 'r').read()
source_encoding = chardet.detect(content)['encoding']
print source_encoding, filename
content = content.decode(source_encoding) #.encode(source_encoding)
codecs.open(filename, 'w', encoding=target_encoding).write(content)
def main():
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
if f.lower().endswith('.java'):
filename = os.path.join(root, f)
try:
convert_encoding(filename, 'utf-8')
except Exception, e:
print filename
def process_bak_files(action='restore'):
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
if f.lower().endswith('.java.bak'):
source = os.path.join(root, f)
target = os.path.join(root, re.sub('\.java\.bak$', '.java', f, flags=re.IGNORECASE))
try:
if action == 'restore':
shutil.move(source, target)
elif action == 'clear':
os.remove(source)
except Exception, e:
print source
if __name__ == '__main__':
# process_bak_files(action='clear')
main()
分享到:
相关推荐
如何利用python批量转换文件编码?例如,txt文件由UTF-16LE转为UTF-8…… 问题重现:往往利用python处理数据时,都会遇到文件编码格式不对,那么如何批量转换呢,下面直接上代码! 实例:整个文件夹的txt文件由UTF-...
主要介绍了使用python批量转换文件编码为UTF-8的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
需要将工作目录下的文件进行转码,开始的编码是GBK的,需要将其转换为utf-8的。文件较多,手动转换肯定不行,用Python写个脚本来实现。
由于以前脑残的我不知道改编码方式,导致出现了大量的GBK,这就很难受,要是一个两个还好说,可是这么多要是一个一个的改我会觉得现在的我比以前还脑残,于是乎,我就想用python批量的修改一下,然后就产生了这篇...
此工具可批量修改文件编码(默认gb2312转utf8,可修改) python版本:2.7 使用说明: dirGb2312ToUtf8('F:\work\MyProject\Source\MyProject') 把以上路径改为自己需要转换的文件夹即可
主要介绍了Python实现批量转换文件编码的方法,涉及Python针对文件的遍历及编码转换实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
class Encoding: def __init__(self): #文件扩展名 self.ext = “.*” #编码 self.srcEncoding=None self.dstEncoding=None def convertEncoding(self, content, srcEncoding=None, dstEncoding=None):
支持批量转换任意格式的文件编码; 可将文件编码转为UTF-8 BOM 、UTF-8、GB2312中的任意一种格式;.zip 基于python开发的编码转换工具,图形化界面基于pyside2(qt5)开发。 支持批量转换任意格式的文件编码; 可将...
Windows文档默认编码是ANSI,Linux文档默认编码是UTF8。项目进行平台移植(Windows—>Linux)时涉及到大量文档编码格式转换,即TXT文档编码ANSI转UTF8。 代码中Python实现了指定目录下TXT...批量转换。简单。易实现。
该工具用于字符编码GB2312转UTF8,可批量转换。只需将该工具放置与需要转换文件的目录下,双击运行即可。 注意:需安装Python,Python 2和3 需安装通用编码检测器,文件内有安装方法; 该工具对于入门学习Python 也...
支持批量转换任意格式的文件编码; 可将文件编码转为UTF-8 BOM 、UTF-8、GB2312中的任意一种格式; src文件夹下是源码,exe文件夹下是打包好可直接在windows下运行的exe程序。 ---- 该资源内项目源码是个人的...
该工具用于字符编码UTF8转GB2312,可批量转换。只需将该工具放置与需要转换文件的目录下,双击运行即可。 注意:需安装Python,Python 2和3 需安装通用编码检测器,文件内有安装方法; 该工具对于入门学习Python 也...
通过执行该工具,批量将图片转成base64的js文件,适合配合微信小程序图标使用!
本文通过实例代码给大家介绍了python实现文件批量编码转换及注意事项,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
我们的思路是,设定一个文件夹存放源视频文件,python读取该文件夹下的全部文件,并对文件通过ffmpeg进行分析,根据需要,修改目标文件的编码、分辨率等等,调用ffmpeg转换。 我这次的需求是,我家液晶电视只支持...
作用就是将当前文件夹内的所有.cpp .h .hpp文件的编码格式从GB2312改成UTF8
分为函数和界面代码,代码整体框架: ...由于python读取地址格式的问题,本代码额外增加了转换,直接复制粘贴就可以。 可在b站看使用教程效果,链接如下: https://www.bilibili.com/video/BV1ZP411a7Uu/