我尝试使用简单的代码来查看read()
在文本文件上的行为。所以我用下面的代码做了一个简单的txt文件:
AB
BA
已尝试将前2个字符输出到控制台。
在将txt文件和open()
的编码设置为"ansi"
的情况下,输出是正确的。
在将txt文件和open()
的编码设置为"utf-8"
的情况下,输出为A
。
将编码设置为"utf-8"
to txt file,将open()
设置为default,输出为ο»
。
这是怎么回事?locale.getpreferredencoding()
返回cp1253
。会不会是那个ο»
字符弄乱了我的utf-8编码?我怎样才能摆脱它?
我的代码:
current_dir = "some_directory" #doesn't really matter
file_name = "name_of_text.txt"
full_path = current_dir+file_name
file_mode = "rt"
f = open(full_path,mode = file_mode) # add encoding = "utf_8" or "ansi" to replicate
reader = f.read(2)
print(reader)
f.close()
发布于 2019-04-23 03:10:56
这些文件已使用utf-8-sig编解码器进行编码,某些Microsoft应用程序在需要UTF-8编码时会使用该编解码器。此编解码器在文件的开头插入三个标记字符(在编解码器docs的本节中介绍)。
当您使用UTF-8解码时,标记字符被读取为一个不可见的单个字符(UTF-8字符可能由多个字节组成),因此您只能看到'A‘。
当您在不使用指定编码的情况下进行解码时,将使用cp1253,并将标记字符视为普通字符,因此您将看到以下输出:
>>> 'AB'.encode('utf-8-sig').decode('cp1253')[:2]
'ο»'
https://stackoverflow.com/questions/55799291
复制相似问题