python⽂件编码问题,看这篇就够了
⾸先: 你需要在⾸⾏加上#coding=utf-8, 就能解决很多python很多中⽂问题,⽐如路径但是⽂件编码问题,还是解决不了的
或许你遇到过,或者你还在使⽤encode跟decode时遇到过AttributeError,所以看到这篇⽂章,编码问题⼀直是学python的其中⼀个难关,下⾯详细解释⼀下,
先强调:尽量使⽤utf-8编码。尽量别⽤txt,如果⽤了记得转成utf-8
python中encode跟decode的转换
python怎么读取txt
⾸先给出Python的编码转换图⽚。后⾯再继续讨论
ASCII码与Unicode字符集:
ASCII码只有英⽂跟部分字符。因为ASCII码⽤⼀个字节来表⽰符号,只允许128个字符。
Unicode字符集可以表⽰中⽂,⽇⽂等多种字符, ⼀般表⽰为b'\xe6\x88\x91'的格式。因为Unicode⽤2或者更多的字节来表⽰符
号,2个字节时便多达65536个字符 。但是,使⽤不同⽂件编码解析的对应的Unicode字符集是不同的。所以才有了下⾯的gbk,utf-8等编码问题
可以看出,不同的编码格式,编码同⼀个字符‘我’是不同的。
注意:windows⾥的Unicode不是指Unicode字符集,⽽是指⽂件编码格式utf-16, 关于字符集,请⾃⾏百度
总结:涉及兼容性考量时,不要⽤记事本即txt,⽤专业的⽂本编辑器保存为不带 BOM 的 UTF-8。
ANSI编码:
即当前操作系统使⽤的编码,可在cmd下⽤chcp命令查看,活动页936为gbk编码,简体中⽂
GBK 等遗留编码最⿇烦,所以除⾮你知道⾃⼰在⼲什么否则不要再⽤了。
UTF-8编码:
UTF-8 本来是兼容性最好的编码但 Windows 偏要加 BOM 于是经常出问题。
读取有BOM的UTF-8编码⽂件,open⽅法传⼊参数:encoding = 'utf-8-sig'
UTF-16
windows所谓的「Unicode」指的是带有 BOM 的⼩端序 UTF-16。⽽不是说字符集Unicode,搞清字符集与编码格式的区别
UTF-16 理论上其实很好,字节序也标明了,但 UTF-16 毕竟不常⽤
python3读取TXT⽂件:
try:
with open(fileName, 'r', encoding = 'utf-8') as fr:
except Exception:
with open(fileName, 'r', encoding = 'gbk') as fr:
可⽤⽂本⽂件打开txt⽂件,然后另存为, 来选择格式,第⼀个显⽰的即当前⽂件编码格式
下⾯给个gbk(经常是txt等)转utf-8格式的脚本,⽤来转换指定⽂件夹下的所有⽂件
#coding = utf-8
import os, time
def load_file(filename):
#使⽤encoding来表⽰打开⽂件的格式
with open(filename, 'r', encoding='gbk') as fr:
doc = fr.read()
with open(filename, 'w', encoding='utf-8') as fw:
fw.write(doc)
def change_dir(path):
for foldername, subfolders, filenames in os.walk(path):        for filename in filenames:
path = foldername + '\\' + filename
load_file(path)
print("success, 位置:" + path)
if __name__ == '__main__':
#输⼊此⽬录下相应的⽂件夹
change_dir('gbk_to_utf-8')
程序为了⽅便跟快速,每个⽂档不能⼤过你的内存
参考资料:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。