在Python 2.7中表示µs

2024-09-30 20:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在解析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”?在


Tags: inpyselfliblinebytetoolsfile
1条回答
网友
1楼 · 发布于 2024-09-30 20:18:53

记事本中的ANSI是Windows的本地语言环境。如果您使用的是US Windows,则区域设置为cp1252。您的文件可能编码为cp1252,而不是{}。如果您使用的是另一个版本的Windows,locale.getpreferredencoding()将告诉您Windows考虑ANSI。在

>>> '\xb5s'.decode('cp1252')
u'\xb5s'

相关问题 更多 >