字符编码

字符编码简介

# 字符编码主要研究对象是文本文件(图片、视屏、音频除外)
文本编辑器读取文件内容流程
	#阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)

#阶段2、文件编辑器会将文件内容从硬盘读入内存

#阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上
python解释器执行文件的流程
	#阶段1、启动python解释器,此时就相当于启动了一个文本编辑器
	#阶段2、python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中
	#阶段3、python解释器解释执行刚刚读入的内存的内容,开始识别python语法
    
    计算机底层存储数据的原理
	"""只认识0101010的二进制数字"""

字符编码的发展史

# 字符编码表:内部就是存储了数字与人类字符的对应关系
1.一家独大
	计算机是由美国人发明的	如何让计算机认识英文
    	定义一个数字与英文字符的对应关系>>>:字符编码表
            ASCII码:只记录了英文字符与数字的对应关系
                1bytes存储英文字符
                	"""
                	A-Z:65-90
                	a-z:97-122
                	"""
2.群雄割据
	中国人
    	自己发明一套编码表>>>:数字与中文、英文字符的对应关系
            GBK码:记录了英文、中文与数字的对应关系
                1bytes存储英文字符
                2bytes存储中文字符 如果不够则使用3bytes\4bytes
                	"""
                	以前很多生僻字打不出来 现在却可以了
                		原因就在于GBK里面在不断地更新 添加对应关系
                	"""
    韩国人
    	韩国棒子也发明了他们的编码表>>>:数字与韩文、英文字符对应的关系
            Euc_kr:记录了英文、韩文与数字的对应关系
    日本人
		日本也发明了他们的编码表>>>:数字与日文、英文字符对应的关系
            shift_JIS:记录了英文、日文与数字的对应关系
    ...
    """
    	群雄割据的阶段会产生一个非常奇怪的现象>>>:乱码
    	其实就是编码本使用混乱导致文本展示错误
    """
3.天下一统
	unicode  # 万国码
    """内部记录了所有国家的字符与数字的对应关系"""
    	所有的字符统一采用最少2bytes存储
    
    现在的计算机可以输出所有国家的字符 内存使用的是unicode编码
    unicode会浪费存储空间和IO时间 所以又开发了一个编码
    utf8  # unicode transformation format 
    	优化了unicode存储数据的容量
        	1bytes存储英文字符
            3bytes存储中文字符
# 结论:内存中的编码不需要考虑 值考虑硬盘上的即可  utf8

字符编码实际应用

1.编码与解码
	编码
    	将人类能够读懂的字符编码成计算机能够直接读懂的字符
    解码
    	将计算机能够直接读懂的字符解码成人类能够读懂的字符
  s1 = '事已至此 何不一搏'      
   # 编码    encode
    # print(s1.encode('gbk'))
    """
    字符串前面如果加了字母b 表示该数据类型为 bytes类型
        bytes类型可以看成是二进制
    """
    # 解码    decode
    # res = b'\xca\xc2\xd2\xd1\xd6\xc1\xb4\xcb \xba\xce\xb2\xbb\xd2\xbb\xb2\xab'
    # print(res.decode('gbk'))
    """
    基于网络传输数据 数据都必须是二进制格式
        所以肯定涉及到编码与解码
    """  

2.如何解决乱码的问题
	数据当初以什么编码编的就以什么编码解即可
    res1 = s1.encode('gbk')
    print(res1)  # 编码
    res2 = res1.decode('euc_kr')
    print(res2)  # 乱码
    res3 = res1.decode('gbk')
    print(res3)  # 正常显示
3.python解释器层面
	python2解释器默认的编码是ASCII码
    	1.文件头:必须写在文件的最上方 告诉解释器使用指定的编码
            # coding:utf8
            # -*- coding:utf8 -*-  美化写法
        2.字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加u
            name = u'你好啊'
    python3解释器默认的编码是utf8
   

文件操作简介

# 什么是文件
	操作系统暴露给用户可以直接操作硬盘的快捷方式
 
# 代码操作文件的流程
	1.打开文件、创建文件
    2.编辑文件内容
    3.保存文件内容
    4.关闭文件
 
# 基本语法结构
	结构1(了解即可):
        f1 = open()
        f1.close()
    结构2(推荐使用):
        with open() as f:
            pass
        
    # 1.使用关键字打开文件
    '''以后写路径为了防止特殊符号 直接加r'''
    # open(r'a.txt')  # 相对路径
    # open(r'D:\py1\day09\a.txt')  # 绝对路径
    # res = open(r'a.txt', 'r', encoding='utf8')
    """
    open(文件的路径,文件的操作模式,文件的编码)
        1.文件的路径是必须要写的
        2.文件的操作模式、文件的编码有时候不用写(一会儿讲)
    """
    # print(res.read())  # 读取文件内容
    # res.close()  # 关闭文件

    """上述操作open完最后都需要执行close 而close这一行很任意被遗忘"""
    # with上下文管理
    with open(r'a.txt', 'r', encoding='utf8') as f:  # f = open()
        data = f.read()
    print(data)

文件的读写模式

r	read	只读模式:只能读不能写
w	write	只写模式:只能写不能读
a   append   只追加模式:在文件末尾添加内容
# r模式
# 路径不存在:直接报错
# with open(r'b.txt', 'r', encoding='utf8') as f1:
#     # pass  (推荐)补全语法结构 本身没有任何功能
#     # ...  (不推荐)补全语法结构 本身没有任何功能
#     pass
# 路径存在:正常打开文件并等待内容读取
with open(r'a.txt', 'r', encoding='utf8') as f1:
    # print(f1.read())  # 一次性读取文件内所有的内容
    f1.write('python是最牛逼的语言!!!')  # 报错
"""
able在英语中大部分情况下表示的是 具备...的能力
    readable    具备读的能力
    writable    具备写的能力
    ...
"""

# w模式
# 路径不存在:自动创建文件
# with open(r'b.txt', 'w', encoding='utf8') as f1:
    # pass  (推荐)补全语法结构 本身没有任何功能
    # ...  (不推荐)补全语法结构 本身没有任何功能
    # pass
# 路径存在:先清空文件内容 之后再写入数据
with open(r'a.txt', 'w', encoding='utf8') as f1:
    f1.write('你们是我见过的最优秀一批学生1\n')  # 写入文件内容
    f1.write('你们是我见过的最优秀一批学生2\r')  # 写入文件内容
    f1.write('你们是我见过的最优秀一批学生3\n')  # 写入文件内容
    print(f1.read())
"""
换行  最早的时候:\r\n
为了节省空间支持一个字符 根据操作系统的不同可能有所区别
    \n 、 \r
"""

# a模式
# 路径不存在:自动创建文件
# with open(r'c.txt', 'a', encoding='utf8') as f1:
#     pass
# 路径存在:不会清空文件内容 而是在文件末尾等待新内容的添加
# with open(r'a.txt', 'a', encoding='utf8') as f1:
    # f1.write('哈哈哈哈或或或或或')
    # print(f1.read())
    
    

文件的操作模式

t模式		
	文本模式 是默认的模式
    	r	rt
        w	wt
        a	at
    1.该模式只能操作文本文件
    2.该模式必须要指定encoding参数
    3.该模式读写都是以字符串为最小单位
	
b模式    
	二进制模式  可以操作任意类型的文件
    	rb  不能省略b
        wb  不能省略b
        ab  不能省略b
    1.该模式可以操作任意类型的文件
    2.该模式不需要指定encoding参数
    3.该模式读写都是以bytes类型为最小单位

文件内置方法

read()  # 一次性读取文件内容
	1.执行完之后光标在文件末尾 继续读取没有内容
    2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline()  # 一次只读一行内容
readlines()  # 结果是一个列表 里面的各个元素是文件的一行行内容
readable()  # 判断当前文件是否可读
支持for循环  # 一行行读取文件内容(推荐使用)  内存中同一时刻只会有一行内容
write()  # 写入文件内容(字符串或者bytes类型)
writelines()  # 可以将列表中多个元素写入文件
writable()  # 判断文件是否可写
flush()  # 相当于主动按了ctrl+s(保存)
posted @   末笙  阅读(119)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示