UnicodeDecodeError:'utf-8'编解码器无法解码位置2的字节0xa0:无效的起始字节,尝试了所有编码样式

问题描述

ad
    data = self._reader.read(nrows)
  File "pandas\_libs\parsers.pyx",line 826,in pandas._libs.parsers.TextReader.read
  File "pandas\_libs\parsers.pyx",line 841,in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas\_libs\parsers.pyx",line 920,in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx",line 1052,in pandas._libs.parsers.TextReader._convert_column_data
  File "pandas\_libs\parsers.pyx",line 1083,in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas\_libs\parsers.pyx",line 1220,in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas\_libs\parsers.pyx",line 1238,in pandas._libs.parsers.TextReader._string_convert
  File "pandas\_libs\parsers.pyx",line 1429,in pandas._libs.parsers._string_Box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 2: invalid start byte

阅读CSV时出现错误

要纠正这一点,我使用了unicode转义:

csv_df=pd.read_csv(file_path,header=0,squeeze=True,dtype=str,keep_default_na=False,encoding='unicode_escape')   

但是, 现在我得到\ xa0两个单词之间的空格:

'ObjectStatus': 'IN\xa0SERVICE'

我的CSV具有:

Key          Values
RequestID   
ObjectType   CONTAINER
ObjectName   INMUNVMBMHPBNB6001ENBCMW005
ObjectStatus IN SERVICE
ObjectType   CONTAINER

解决方法

unicode_escape编解码器用于文字转义码(长度4 \\xa0与长度1 \xa0)。如图所示,这只是Python对该字符串的调试表示,它会打印\xa0以表明它不是常规空间。您的文件可能是用cp1252latin1编码的,因为\xa0是这些编码中的NO-BREAK SPACE

示例:

>>> d = {'ObjectStatus': 'IN\xa0SERVICE'}
>>> d
{'ObjectStatus': 'IN\xa0SERVICE'}
>>> print(d['ObjectStatus'])
IN SERVICE
,

对我来说,下面已经奏效了。 使用 str.replace() 我已经用 ' '

替换了具有 '\xa0' 的列中的所有值
csv_df = pd.read_csv(file_path,header=0,squeeze=True,dtype=str,keep_default_na=False)

csv_df['Values'] = csv_df['Values'].astype(str).str.replace(u'\xa0',' ')

我不得不将这些值传递给另一个创建 XML 的函数,尝试了所有编码,但都没有奏效。