猿问

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

我正在尝试使用简单的代码来查看read()文本文件的行为方式。所以我制作了一个简单的txt文件,内容如下:


AB


BA

试图输出以控制拳头 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_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()


MM们
浏览 165回答 1
1回答

呼唤远方

这些文件已使用 utf-8-sig 编解码器进行编码,某些 Microsoft 应用程序在需要 UTF-8 编码时使用该编解码器。此编解码器在文件开头插入三个标记字符(在编解码器文档的本节中描述)。当您使用 UTF-8 解码时,标记字符被读取为单个不可见字符(UTF-8 字符可能由多个字节组成),因此您只会看到“A”。当您在未指定编码的情况下进行解码时,将使用 cp1253,并将标记字符视为普通字符,因此您会看到以下输出:>>> 'AB'.encode('utf-8-sig').decode('cp1253')[:2]'ο»'
随时随地看视频慕课网APP

相关分类

Python
我要回答