我正在尝试使用简单的代码来查看datetime
在文本文件上的行为。因此,我用以下内容制作了一个简单的txt文件:
read()
试图输出以控制第一个2个字符。
将txt文件和AB
BA
的编码都设置为"ansi"
时,输出正确。
txt文件和open()
的编码都设置为"utf-8"
时,输出为open()
。
将txt文件的编码设置为A
,而将"utf-8"
设置为默认值,则输出为open()
。
这是怎么回事? ο»
返回locale.getpreferredencoding()
。 cp1253
字符可能与我的utf-8编码混淆了吗?我该如何摆脱呢?
我的代码:
ο»
答案 0 :(得分:1)
文件已使用utf-8-sig编解码器编码,某些Microsoft应用程序在需要UTF-8编码时会使用它们。此编解码器在文件的开头插入三个标记字符(在编解码器docs的本节中进行了介绍)。
使用UTF-8解码时,标记字符被读取为单个不可见字符(UTF-8字符可能由多个字节组成),因此您只会看到'A'。
在不指定编码的情况下解码时,将使用cp1253,它将标记字符视为普通字符,因此输出如下:
>>> 'AB'.encode('utf-8-sig').decode('cp1253')[:2]
'ο»'