我試圖讀取使用Python奇怪的字符串格式化後閱讀()蟒蛇
open('/Desktop/test.csv','rb').read()[1:15]
一個文件,我得到返回類似:
'\xfeY\x00!\x00B\x00L\x00-\x00 \x00B'
即使當我打開test.csv雖然在文本編輯器中它是可讀的字符串格式。有誰知道這是什麼格式,以及如何將其轉換回字符串?謝謝!
我試圖讀取使用Python奇怪的字符串格式化後閱讀()蟒蛇
open('/Desktop/test.csv','rb').read()[1:15]
一個文件,我得到返回類似:
'\xfeY\x00!\x00B\x00L\x00-\x00 \x00B'
即使當我打開test.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
對於'7':) +1 – root
沒有什麼奇怪的,一切都很好。 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'
您切片的第一個字節,最大的提示被遺漏了! :-P –