【问题标题】:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 2: invalid start byte, tried all encoding stylesUnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 2: invalid start byte, try all encoding styles
【发布时间】:2021-01-05 10:15:11
【问题描述】:
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

【问题讨论】:

  • \xa0 是一个 Unicode U+00A0 NO-BREAK SPACE。 Python 使用 Unicode 转义序列显示字符串,因此您可以看到它不是常规空格。如果您print 的值,它将显示为一个空格。
  • 其实这个字典是作为请求传递给zeep客户端对象的。它正在转换为问号字符**

标签: python pandas dataframe csv flask


【解决方案1】:

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

【讨论】:

  • 其实这个字典是作为请求传递给zeep客户端对象的。它正在转换为问号字符
【解决方案2】:

对我来说,下面的工作。 使用 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 的函数,尝试了所有编码,但都没有成功。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 2018-10-15
    • 2021-11-24
    • 2022-09-26
    • 2021-07-21
    • 2020-03-12
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多