0

我正在尝试使用 Python 读取文件

open('/Desktop/test.csv','rb').read()[1:15]

我得到了类似的回报:

'\xfeY\x00!\x00B\x00L\x00-\x00 \x00B'

即使当我在文本编辑器中打开 test.csv 时,它也是可读的字符串格式。有谁知道这是什么格式以及如何将其转换回字符串字符?谢谢!

4

2 回答 2

2

该文件使用 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
于 2013-01-23T17:13:37.563 回答
1

这没有什么奇怪的,一切都很好。Python 使用\x00转义序列来表示不可打印的字符:

>>> '\x00'
'\x00'
>>> len('\x00')
1
>>> '\x65'
'e'

注意十六进制字符 65 是如何打印为e; 毕竟它是一个可打印的 ASCII 字母。

您的数据可能被编码为不同于 ASCII 的东西;例如,尝试使用 UTF-16 对其进行解码。对我来说,前 1 个字节看起来像 UTF-16 BOM 的第二个字节:

>>> import codecs
>>> codecs.BOM_UTF16
'\xff\xfe'
于 2013-01-23T17:11:18.967 回答