python批量转换文件编码

今天在 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 [...]

python处理大五码

在抓取一个先进论坛的图片,遇到了一些编码问题,因为该论坛采用的是大五码 (big5 ),通过 urllib2.urlopen() 拿到的是乱码 >> s = urllib2.urlopen(url).read() >> s ‘\xa1i\xa5t\xc3\xfe\xa4\xd1\xb0\xf3\xa1j—– \xc2y\xa9_\xa4j\xc6[' >> print s �i�t���Ѱ��j----- �y�_�j�[ 所以我们需要将其转换成 unicode 编码 >> s = urllib2.urlopen(url).read().decode('big5') >> s u'\u3010\u53e6\u985e\u5929\u5802\u3011----- \u7375\u5947\u5927\u89c0' >> print s 【另類天堂】----- 獵奇大觀 在解析的过程中,还经常碰到一些以转义字表示的汉字,当显示在非HTML环境中时,就不那么能看得懂了。 超完美女优,为什么这么靓啊! python 提供了 unichr() 函数用于将数字序号转换成对应的 unicode 字符 >> s = u'超完美女优,为什么这么靓啊!' >> print re.sub(r'&#(\d{1,5});', lambda m: unichr(int(m.group(1))), s) 超完美女优,为什么这么靓啊! PS: [...]