我正在解析csv,并使用xlwt
将其部分内容写入xls文件
每次在原始文件中弹出µs时,我都会从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中,我可以很容易地表示µs:
^{pr2}$在python2中,显然不是:
>>> '\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'
可以在python2中工作,谢谢@cdarke。但是print并不能解决问题,它不是我可以提供给xlwt
的内部表示。
编辑结束。在
那么如何在Python 2中表示µs?
记事本++显示csv文件很好,有µs。“编码”菜单显示它的编码为“ANSI”,如果我改为“UTF-8”,我开始看到“B5”在整个文本。 python2unicode没有名为“ANSI”的编码。 有没有一种python2unicode编码等同于Notepad++所称的“ANSI”?在
记事本中的}。如果您使用的是另一个版本的Windows,
ANSI
是Windows的本地语言环境。如果您使用的是US Windows,则区域设置为cp1252
。您的文件可能编码为cp1252
,而不是{locale.getpreferredencoding()
将告诉您Windows考虑ANSI
。在相关问题 更多 >
编程相关推荐