簡體   English   中英

UnicodeError: UTF-16 流不以 BOM 開頭

[英]UnicodeError: UTF-16 stream does not start with BOM

我無法通過 python 讀取 csv 文件。 我的 csv 文件有韓文和數字。

下面是我的python代碼。

import csv
import codecs
csvreader = csv.reader(codecs.open('1.csv', 'rU', 'utf-16'))
for row in csvreader:
    print(row)

首先,當我在上面的代碼中輸入“for row in csvreader”行時,出現了 UnicodeDecodeError。

所以我使用了下面的代碼然后問題似乎解決了

csvreader = csv.reader(codecs.open('1.csv', 'rU', 'utf-16'))

然后我遇到了 NULL 字節錯誤。 然后我無法弄清楚 csv 文件有什么問題。

[更新] 我認為我沒有對之前的代碼進行任何更改,但我的程序顯示“UnicodeError: UTF-16 流不以 BOM 開頭”

當我通過 excel 打開 csv 時,我可以看到正確格式的表格(圖像附在底部)但是當我在 sublime Text 中打開它時,下面是我得到的片段。

504b 0304 1400 0600 0800 0000 2100 6322
f979 7701 0000 d405 0000 1300 0802 5b43
6f6e 7465 6e74 5f54 7970 6573 5d2e 786d
6c20 a204 0228 a000 0200 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

如果您需要有關我的文件的更多信息,請告訴我!

我很感激你的幫助。 提前致謝:)

在excel中顯示的csv文件

在此處輸入圖片說明

以崇高文本顯示的 csv 文件在此處輸入圖片說明

問題是您的輸入文件顯然不是以 BOM 開頭(一種特殊字符,對於 little-endian 和 big-endian utf-16,其編碼方式不同),因此您不能只使用“utf-16”作為編碼,您必須明確使用“ utf-16-le ”或“ utf-16-be ”。

如果你不這樣做, codecs會猜測,如果它猜錯了,它會嘗試向后讀取每個代碼點並獲得非法值。

如果您發布的示例以偶數偏移量開始並包含一堆 ASCII,則它幾乎沒有結尾,因此請使用 -le 版本。 (但當然,最好看看它的實際情況,而不是猜測。)

既然您在問題中包含了更多文件,那根本就不是 CSV 文件。 我的猜測是它是一個舊式的二進制 XLS 文件,但這只是一個猜測。 如果您只是將 spam.xls 重命名為 spam.csv,則不能這樣做; 您需要將其導出為 CSV 格式。 (如果您需要這方面的幫助,請在另一個提供 Excel 幫助而不是編程幫助的網站上詢問。)

如果由於某種原因你不能這樣做,PyPI 上有一些庫可以解析 XLS 文件——但如果你想要 CSV,並且你可以導出 CSV,這是一個更好的主意。

該文件以PKZIP 簽名開頭,因此它實際上是一個 XLSX 文件。

這很棒,因為您不必在 CSV 文件中知道字符編碼、標題、列類型、分隔符、文本引用和轉義規則以及行尾,只需打開它,程序就可以看到它的結構。數據。

在為這個問題苦苦掙扎數小時后,我了解到 Excel 以多種 CSV 格式導出數據。

在 Excel 中,請確保在導出時使用“CSV UTF-8(逗號分隔)”選項。 (與其他 CSV 選項相比,您通常可能希望使用此類型)。

一旦你確定了 UTF 類型,在這種情況下,'UTF-8',回到你的 python 腳本並將編碼更改為 'UTF-8',盡管我發現跳過這個參數也有效。

with open('schools_dataset.csv', encoding='utf-8') as csv_file:
# continue opening the file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM