我解析一個CSV文件,並寫入其內容的一部分,使用xlwt
在Python代表微秒2.7
每次微秒原始文件彈出一個xls文件,我從xlwt
得到的UnicodeDecodeError:
File "C:\SW_DevSandbox\E2\FlightTestInstrumentation\ICDforFTI\ICDforFTI.py", line 243, in generateICD
icd.write(icdLine,icdTitle.index('Unit'),entry['Unit'])
File "C:\espressoE2\tools\OpenVIB\1.2\python\lib\site-packages\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:\espressoE2\tools\OpenVIB\1.2\python\lib\site-packages\xlwt\Row.py", line 240, in write
StrCell(self.__idx, col, style_index, self.__parent_wb.add_str(label))
File "C:\espressoE2\tools\OpenVIB\1.2\python\lib\site-packages\xlwt\Workbook.py", line 326, in add_str
return self.__sst.add_str(s)
File "C:\espressoE2\tools\OpenVIB\1.2\python\lib\site-packages\xlwt\BIFFRecords.py", line 24, in add_str
s = unicode(s, self.encoding)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb5 in position 0: invalid start byte
我認爲根本問題是:
在Python 3,我很容易代表微秒:
>>> '\xb5s'
'µs'
>>>
在Python 2,顯然不是:
>>> '\xb5s'
'\xb5s'
>>> u'\xb5s'
u'\xb5s'
>>> unicode('\xb5s')
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 0: ordinal not in range(128)
>>> unicode('\xb5s','utf8')
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\espressoE2\tools\OpenVIB\1.2\python\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb5 in position 0: invalid start byte
>>>
編輯:print u'\xb5s'
作品在Python 2,感謝@cdarke。但是打印並不能解決問題,它不是我可以送到xlwt
的內部表示。 編輯結束。
那麼如何在Python 2中表示μs?
記事本++顯示csv文件很好,帶有μs。 「編碼」菜單顯示它的編碼爲「ANSI」,如果我更改爲「UTF-8」,我開始在整個文本中看到「B5」。 Python 2 Unicode沒有稱爲「ANSI」的編碼。 是否有Python 2 Unicode編碼等效於Notepad ++所稱的「ANSI」?
關於python 2.7我打印u'\ xb5s'',它在OS X的終端上顯示得很好,所以它可能是終端系統使用的編碼。你在使用哪種環境?由於你在Windows上,你應該知道'cmd.exe'不支持Unicode。 – cdarke
@cdarke'print u'\ xb5s''也在我的python 2中工作,謝謝你的提示。我原來的嘗試沒有使用print語句。 –
「ANSI」編碼可能是「Windows-1252」。嘗試使用「cp1252」編碼,如果它不會幫助「latin_1」。 – Nikita