我正在尝试使用简单的代码来查看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]
'ο»'
添加回答
举报
0/150
提交
取消