Python - 文件编码格式api

序言 文件编码简介

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)) 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值