零基础 学 python开发 (Genius套餐A) 三十四

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/90178421

夜光序言:

 

 

成熟不是心在变老,是泪在打转还能微笑。

 

 

 

 

 

正文:

6.3 文件编码 
6.3.1 目标 


文件的本质是二进制文件,因此文本文件存储时实际上是通过某种编码转为二进制数据存储的,相同的文本采用不同的编码得到的二进制数据时不同的,这对于汉字的文本十分重要。

目标是深刻理解编码的本质,正确读写文本文件。



6.3.2 文件编码 


在中文 Windows 系统中如果我们不指定文本文件的编码,那么它采用系统默认的 GBK编码,即一个英文字符是 ASCII 码,一个汉字是两个字节的内码。


例 6-3-1: GBK 编码 


fobj=open("c:\\abc.txt","wt")
fobj.write("abc 我们")
fobj.close()
执行后 abc.txt 文件是 7 个字节,分别是:
0x61 0x62 0x63 0xce 0xd2 0xc3 0xc7
其中前 3 个是 abc 字符,0xce,0xd2 这 2 个字节是汉字"我"的内码,0xc3,0xc7 这 2 个字节是汉字"们"的内码。


例 6-3-2:UTF-8 编码 


如果我们不使用默认的编码,可以在 open 函数中用 encoding 参数指定编码。
fobj=open("c:\\abc.txt","wt",encoding="utf-8")
fobj.write("abc 我们")
fobj.close()
执行后 abc.txt 文件是 9 个字节,分别是:
0x61 0x62 0x63 0xe6 0x88 0x91 0xe4 0xbb 0xac
其中前 3 个是 abc 字符,0xe6, 0x88, 0x91 这 3 个字节是汉字"我"的 UTF-8 编码,0xe4,0xbb ,0xac 这 3 个字节是汉字"们"的 UTF-8 编码。

文件如果是用 GBK 编码存储的,就一定使用 GBK 编码打开读取,不能使用 UTF-8 编码打开读取,反之亦然。


6.3.3 【案例】UTF-8 文件编码 


1、案例描述 
用 UTF-8 编码存储文本文件,再用相同编码读取文件。
 
2、案例分析 
要文件按指定的 UTF-8 编码存储,必须在创建文件时指定 encoding:
 fobj = open("c:\\abc.txt", "wt",encoding="utf-8")
要文件按指定的 UTF-8 编码读取,必须在打开文件时指定 encoding:
 fobj = open("c:\\abc.txt", "rt",encoding="utf-8")
 
3、案例代码 

def writeFile():
 fobj = open("c:\\abc.txt", "wt",encoding="utf-8")
 fobj.write("abc 我们")
 fobj.close()
def readFile():
 fobj = open("c:\\abc.txt", "rt")
 rows=fobj.readlines()
 for row in rows:
 print(row)
try:
 writeFile()
 readFile()
except Exception as err:
 print(err)
执行结果:
abc 鎴戜滑
由此可见编码不匹配会出现乱码,如果把 readFile 函数改成:
def readFile():
 fobj = open("c:\\abc.txt", "rt",encoding="utf-8")
 rows=fobj.readlines()
 for row in rows:
 print(row)
那么可以正确读出文件内容。


 

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/90178421