为什么这个python bs4&csv编写器代码要在BOM中编写?

为什么这个python bs4&csv编写器代码要在BOM中编写?,python,csv,web-scraping,utf-8,beautifulsoup,Python,Csv,Web Scraping,Utf 8,Beautifulsoup,我正在使用bs4从HTML中提取一个多语言表,并将其保存为csv。 但是无论我用encoding=utf-8做什么,我都会得到一个由BOM编写的csv文件。 在抓取和保存HTML时,是否有任何简单的方法可以使用简单的选项来更改它? 我将utf-8改为euc-**选项,因为目标网站是用多国语言编写的,但这是徒劳的 soup=bs(res.text,'html.parser',from_encoding='utf8') resultset = soup.find('table',class

我正在使用bs4从HTML中提取一个多语言表,并将其保存为csv。 但是无论我用encoding=utf-8做什么,我都会得到一个由BOM编写的csv文件。 在抓取和保存HTML时,是否有任何简单的方法可以使用简单的选项来更改它? 我将utf-8改为euc-**选项,因为目标网站是用多国语言编写的,但这是徒劳的

soup=bs(res.text,'html.parser',from_encoding='utf8')

    resultset = soup.find('table',class_="type_12345")

    print(resultset)
    records=[]
    for tr in resultset.find_all('tr'):
        tds = tr.find_all('td')
        #url = tds[2].a.get('href')
        records.append([elem.text.encode('utf8') for elem in tds])


    with open('whystillBOM.csv', 'a',encoding="utf-8-sig") as f:
        writer = csv.writer(f)
        writer.writerows(records)

“utf-8-sig”编码自动写入Microsoft版本utf-8的BOM。如果您不需要BOM表,只需使用UTF-8即可


如果您正在读取的文件可能包含BOM表,则您可以将其解码为utf-8-sig,并且标准utf-8仍将被解码而不会出错。

谢谢您的回答!即使我在上面的代码中将所有内容更改为UTF8,它仍然会写入BOM文件。。原因是什么?谢谢您是否使用新的输出文件?仅附加到现有csv不会从文件开头删除BOM表。如果不是这样,也许您可以将您的问题包含在一些数据中,这些数据在运行代码时会产生这个结果。