Python - 文件编码格式api

大憨熊 提交于 2019-12-09 12:42:30

序言 文件编码简介

ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。

拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符

GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。

Unicode编码:包含世界上所有的字符,是一个字符集。

UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。

关于utf-8 bom

BOM即byte order mark(定义字节顺序),UTF-8文件中放置BOM主要是微软的习惯(比如utf-8无bom的c++文件在vs中无法编译),但是放在别的系统上会出现问题。无BOM的UTF-8才是标准形式,UTF-8不需要BOM,带BOM的UTF-8文件的开头会有U+FEFF,所以新建的utf-8 bom空文件会有3字节的大小。

一、获取文件编码格式

import chardet 

# 输出并返回文件格式
def getFileFormat(filename):
	content=codecs.open(filename,'rb').read() 
	source_encoding=chardet.detect(content)['encoding']
	return source_encoding

二、文件编码格式转换

import chardet 

# 文件格式转换 返回 原格式类型, 新格式类型
# 默认转换为utf-8-sig格式 即带bom的utf-8格式  可替换为utf-8、gbk
def convert(filename,out_enc="utf-8-sig"): 
	try: 
		content=codecs.open(filename,'rb').read() 
		source_encoding=chardet.detect(content)['encoding']

		content=content.decode(source_encoding).encode(out_enc) 
		codecs.open(filename,'wb').write(content) 
		return source_encoding, getFileFormat(filename)
	except IOError as err: 
		print("I/O error:{0}".format(err)) 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!