首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对文本文件和不同的编码使用read()时出现意外输出

对文本文件和不同的编码使用read()时出现意外输出
EN

Stack Overflow用户
提问于 2019-04-23 02:34:04
回答 1查看 52关注 0票数 0

我尝试使用简单的代码来查看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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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]
'ο»'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55799291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档