文件编码格式一直是很多人特别头疼的一件事情,最近由于跨平台开发,经常出现编码格式的问题。所以关于编码格式转换采用python的方式记录下来以便后期需要。让我们一起走进python对编码格式的操作之路
编码格式介绍
ASCII码:使用单字节编码,所以范围基本只有英文字母、数字和一些特殊字符;只有256个字节。
Unicode:能够表示全世界的所有字符。
GBK:只用来编码汉字的,GBK全称《汉字编码扩展规范》双字节编码。
UTF-8:针对Unicode的可变字符编码,又称万能码。
三方库文件
chardet、codecs
库文件简介
在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。
在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。
代码转换实例
Main函数
import osimport sysimport codecsimport chardet#将路径下面的所有文件,从原来的格式变为UTF-8的格式def Main(): path = '文件路径' (floders, files) = list_folders_files(path) for file in files: file_name =os.path.join(floders,file) with open(file_name, "rb") as f_in: data = f.read() code_type = chardet.detect(data)['encoding'] file_convert(file_name,file, code_type, 'UTF-8')
文件转换代码
def convert(file_name,file, in_code="GBK", out_code="UTF-8"): """ 该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到UTF-8 :param file: 文件路径 :param in_code: 输入文件格式 :param out_code: 输出文件格式 :return: """ out_path='输出文件路径' try: with codecs.open(file_name, 'r', incode) as f_in: new_content = f_in.read() f_out = codecs.open(os.path.join(out_path,file), 'w', out_code) f_out.write(new_content) f_out.close except IOError as err: print("I/O error: {0}".format(err))
获取指定文件夹下文件
import osdef list_folders_files(path): """ 返回 "文件夹" 和 "文件" 名字 :param path: "文件夹"和"文件"所在的路径 :return: (list_folders, list_files) :list_folders: 文件夹 :list_files: 文件 """ list_folders = [] list_files = [] for file in os.listdir(path): file_path = os.path.join(path, file) if os.path.isdir(file_path): list_folders.append(file) else: list_files.append(file) return (list_folders, list_files)
Linux 命令行转换
iconv命令用于文件编码的转换,
碰到gbk编码的文件,需要转换成utf8,直接使用该命令即可。
命令用法
iconv --list :列出iconv支持的编码列表
语法
iconv -f 原编码 -t 新编码 filename -o newfile
参数说明
参数 | 参数描述 |
---|---|
-f | from 来源编码 |
-t | to 转换后新编码 |
-c | 忽略无效字符 |
-s | --silent,忽略警告 |
-o file | 可选,没有的话直接, 转换当前文件,使用-o 保留源文件 |
命令实例
查看文件
$ file testtest: UTF-8 Unicode text
转换
$ iconv -f utf8 -t gbk test -o test.gbk
效果
$ file test*test: UTF-8 Unicode text test.gbk: ISO-8859 text
作者:羽恒
链接:https://www.jianshu.com/p/d5030db5da0e
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦