首页 > 解决方案 > 下载的 CSV 文件 - UTF-8-BOM 格式的问题

问题描述

我有从 bitbucket 下载 CSV 文件的代码。下载后文件变成了一个字符串列表(所有行的列表)。问题是当文件是 UTF-8-BOM 格式时,它在开头添加了字符,然后在尝试读取 CSV 文件时失败。下载后如何编码?

这是代码:

fld = self._download(csv_url)
converted = parser.parse(fld)

def parse(self, f: io.StringIO):
    for row in csv.reader(f):  # ---- **failed here**.
        if not row:
            continue

def _download(self, url: str):
    response = self.authenticator.download(url)
    return response.text.splitlines()

标签: pythoncsvutf-8character-encodingpython-3.8

解决方案


如果 HTTP 请求返回带有 BOM 的数据而您不想要它,请将其删除。

def _download(self, url: str):
    response = self.authenticator.download(url)
    return response.text.lstrip('\ufeff').splitlines()
    #                   ^^^^^^^^^^^^^^^^^

str.lstrip()从某种意义上说是健壮的,如果它不以 BOM 开头,它只会返回整个字符串。


推荐阅读