2024-09-30 02:20:36 发布
网友
我想用Python读取一个文件
open('/Desktop/test.csv','rb').read()[1:15]
我得到的回报是:
'\xfeY\x00!\x00B\x00L\x00-\x00 \x00B'
即使当我打开测试.csv在文本编辑器中,它是可读的字符串格式。有人知道这是什么格式,以及如何将其转换回字符串吗?谢谢!你知道吗
文件用UTF-16编码。你知道吗
>>> open('/Desktop/test.csv', 'r', encoding='UTF-16').read(7) 'Y!BL- B'
或者,如果您仍在使用较旧的Python版本
>>> import codecs >>> codecs.open('/Desktop/test.csv', 'r', encoding='UTF-16').read(7) u'Y!BL- B'
还要注意的是,Python使用基于零的索引,就像大多数其他语言(C、Java、C#、JavaScript等)一样
>>> 'abcdefghijklmnopqrstuvwxyz'[1:15] 'bcdefghijklmno' # Omits the 'a', which is at index 0
这没什么奇怪的,一切都好。Python使用\x00转义序列来表示不可打印的字符:
\x00
>>> '\x00' '\x00' >>> len('\x00') 1 >>> '\x65' 'e'
注意十六进制字符65是如何被打印成e;毕竟它是一个可打印的ASCII字母。你知道吗
e
您的数据可能被编码为与ASCII不同的格式;例如,尝试使用UTF-16对其进行解码。在我看来,第一个1字节就像UTF-16 BOM的第二个字节:
>>> import codecs >>> codecs.BOM_UTF16 '\xff\xfe'
文件用UTF-16编码。你知道吗
或者,如果您仍在使用较旧的Python版本
还要注意的是,Python使用基于零的索引,就像大多数其他语言(C、Java、C#、JavaScript等)一样
这没什么奇怪的,一切都好。Python使用
\x00
转义序列来表示不可打印的字符:注意十六进制字符65是如何被打印成
e
;毕竟它是一个可打印的ASCII字母。你知道吗您的数据可能被编码为与ASCII不同的格式;例如,尝试使用UTF-16对其进行解码。在我看来,第一个1字节就像UTF-16 BOM的第二个字节:
相关问题 更多 >
编程相关推荐