为了账号安全,请及时绑定邮箱和手机立即绑定

使用带有文本文件和不同编码的 read() 的意外输出

使用带有文本文件和不同编码的 read() 的意外输出

MM们 2022-01-18 17:44:02
我正在尝试使用简单的代码来查看read()文本文件的行为方式。所以我制作了一个简单的txt文件,内容如下:ABBA试图输出以控制拳头 2 个字符。将编码设置为"ansi"txt 文件和open()输出是正确的。将编码设置为"utf-8"txt 文件,open()输出为A.将编码设置为"utf-8"txt 文件并open()设置为默认值,输出为ο».到底是怎么回事 ?locale.getpreferredencoding()返回cp1253。可能是那个ο»字符弄乱了我的 utf-8 编码吗?我怎样才能摆脱它?我的代码:current_dir = "some_directory" #doesn't really matter file_name = "name_of_text.txt"full_path = current_dir+file_namefile_mode = "rt"f = open(full_path,mode = file_mode) # add encoding = "utf_8" or "ansi" to replicatereader = f.read(2)print(reader)f.close()
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

这些文件已使用 utf-8-sig 编解码器进行编码,某些 Microsoft 应用程序在需要 UTF-8 编码时使用该编解码器。此编解码器在文件开头插入三个标记字符(在编解码器文档的本节中描述)。


当您使用 UTF-8 解码时,标记字符被读取为单个不可见字符(UTF-8 字符可能由多个字节组成),因此您只会看到“A”。


当您在未指定编码的情况下进行解码时,将使用 cp1253,并将标记字符视为普通字符,因此您会看到以下输出:


>>> 'AB'.encode('utf-8-sig').decode('cp1253')[:2]

'ο»'


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信