微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

有时在读取文件时是否会出现乱码?因为在中文Windows系统中,如果不指定文本文件的编码,那么它就会采用系统默认的GBK编码,即一个英文字符是ASCII码,一个汉字是两个字节的内码。文件的本质是二进制文件,相同的文本采用不同的编码得到的二进制数据是不同的。

解决方案

GBK编码执行文件后是7个字节,分别是Ox61Ox62 OX63 Oxce Oxd2 Oxc3 Oxc7


fobj=open('c:\\abc.txt','wt',encoding=’gbk’)

fobj.write('abc 我们')

fobj.close()


其中前三个是abc符号,Oxce Oxd2是‘我’,Oxc3 Oxc7是‘们’。

而在open中用encoding参数指定UTF-8编码,执行后就是9个字符,它们分别是:

Ox61 Ox62 Ox63 Oxe6 Ox88 Ox91 Oxe4 OxbbOxac.其中Oxe6 Ox88 Ox91是‘我’,

Oxe4 Oxbb Oxac是‘们’。

使用方法:


def writeFile():

         f=open('abc.txt','wt',encoding='utf-8')

         f.write('abc我们')

         f.close()

def readFile():

         f=open('abc.txt','rt',encoding='utf-8')

         for  s in f.readlines():

                  print(s,end='')

         f.close()

try:

         writeFile()

         readFile()

except Exception as e:

         print(e)


#运行结果

adc我们


当使用的编码不一致时就会出现以下情况:


def writeFile():

         f=open('abc.txt','wt',encoding='utf-8')

         f.write('abc我们')

         f.close()

def readFile():

         f=open('abc.txt','rt',encoding='gbk')

         for  s in f.readlines():

                  print(s,end='')

         f.close()

try:

         writeFile()

         readFile()

except Exception as e:

         print(e)


#运行结果

abc鎴戜滑


结语

文本读取的默认编码是GBK,所以想用GBK读文件时可以用encoding参数,也可以不用,它会默认的使用GBK,但如果要使用UTF-8编码就必须用encoding参数指定。

END

编  辑   |   王楠岚

责  编   |   李   靖

 where2go 团队



微信号:算法与编程之美          

Python|如何让文件读取不再乱码_编程之美

长按识别二维码关注我们!

温馨提示:点击页面右下角发表评论,期待您的参与!期待您的转发!