序言 文件编码简介
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))
来源:CSDN
作者:汐客
链接:https://blog.csdn.net/qq_22337119/article/details/103455165