关于编码的问题

关于编码的问题

老师,请问一下,则练习read()方法时出现如下疑问:

准备两个文件doc1.txt(中文),doc2.txt(英文),

open()方法打开doc1.txt时,做了两种处理:

  1. 按照doc1.txt的编码格式指定encoding='utf-8',调用read()

  2. 把doc1.txt的编码格式转换成gbk

两种方式都成功对doc1.txt进行读取

但是当open()打开doc2.txt时(此时doc2.txt编码格式为utf-8),出现了一下几种情况:

  1. 不指定encoding,以默认方式正常读取

  2. 把doc2.txt编码格式转换为US-ASCII格式,此时指定encoding为utf-8、gbk、us-ascii时都能正常读取

  3. 把doc2.txt编码格式转换为utf-16格式,此时只有指定encoding为utf-16时才能正常读取

为什么英文文件可以用非原编码格式的编码进行读取,能麻烦您帮我梳理一下编码和解码的相关知识吗?自己在网上查看还是感觉似懂非懂的,请老师帮忙讲一下

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好: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时才能正常读取。

如果解决了你的疑惑,请采纳,祝学习愉快~ 


  • 龙胆草 提问者 #1
    谢谢老师,终于了解了几种编码方式的区别与联系
    2020-03-23 23:46:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师