关于编码的问题
老师,请问一下,则练习read()方法时出现如下疑问:
准备两个文件doc1.txt(中文),doc2.txt(英文),
open()方法打开doc1.txt时,做了两种处理:
按照doc1.txt的编码格式指定encoding='utf-8',调用read()
把doc1.txt的编码格式转换成gbk
两种方式都成功对doc1.txt进行读取
但是当open()打开doc2.txt时(此时doc2.txt编码格式为utf-8),出现了一下几种情况:
不指定encoding,以默认方式正常读取
把doc2.txt编码格式转换为US-ASCII格式,此时指定encoding为utf-8、gbk、us-ascii时都能正常读取
把doc2.txt编码格式转换为utf-16格式,此时只有指定encoding为utf-16时才能正常读取
为什么英文文件可以用非原编码格式的编码进行读取,能麻烦您帮我梳理一下编码和解码的相关知识吗?自己在网上查看还是感觉似懂非懂的,请老师帮忙讲一下
正在回答
同学你好:ASCII 编码是很早就存在的一种简单的单字节的编码方案,只定义了128个字符。
GBK是后来才出现的更加全面的一种编码,其中英文、数字和简单的符号都直接用ASCII,因此GBK和ASCII的英文部分是一样的。
而utf-8是针对Unicode的一种可变长度字符编码,其编码规则根据字节长度不同而不同。在只有一个字节时和ASCII的编码规则相同。由于英语字母在utf-8中用一个字节存储,和ASCII的编码规则相同,因此UTF-8 编码和 ASCII 码的英文部分是相同的。
所以我们可以认为ASCII、GBK和utf-8的英文编码均相同,而在不指定encoding的情况下默认为GBK,所以在不指定encoding的情况下英文可以正常读取。
而utf-16对任何字符都用两个字节来保存,和上面那些编码都不同,因此在编码格式为utf-16情况下,只有指定encoding为utf-16时才能正常读取。
如果解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星