2013-10-29 135 views
3

我正在通過Django上傳文件控件讀取CSV文件。'utf8'編解碼器無法解碼字節0xbd CSV文件1/2字符

我想存儲(1/2)到數據庫中,但它提供了以下異常:

'utf8' codec can't decode byte 0xbd C.S.V. file 1/2 Char 
UnicodeDecodeError at /admin/request_system/customers/upload/ 

「utf-8」編解碼器在45位置不能解碼字節0xbd:無效的起始字節

+0

你能告訴我們Django視圖的代碼嗎?你如何閱讀CSV文件? –

+0

你確定它是utf-8編碼嗎? –

+0

張開(Customer.get_temp_file_name(), 'R')爲DATA_FILE: 讀者= MyFileReader(_file = DATA_FILE) DEF __init __(個體,_file =無): 如果_file: self.DATA_FILE = CSV。 DictReader(_file) – Clayton

回答

3

您的CSV文件不是utf8格式,因此解碼器看到一個無效(即非utf8)字節序列。找出正確的格式並/或將CSV文件重新保存爲utf8,然後重新上傳。

0xbd是Latin-1中的½字符,所以這很可能是你現在擁有的。 utf8將其表示爲兩個字節的序列\xc2\xbd

+0

讓我,現在試試吧..... – Clayton

+0

完美,我認爲這是更簡單的方法。只是爲了將csv文件轉換爲UTF-8並再次上傳。 1/2個字符已被正確保存。 謝謝+1 – Clayton

+0

不客氣。如果它解決了您的問題,請「接受」我的回答(點擊複選標記)。 – alexis

2

您正在使用錯誤的字符集,可能是Windows-1252。它不是Unicode或UTF-8。

s = s.decode('windows-1252') 
+0

如果django期待utf8,最簡單的就是給它utf8。 – alexis

+0

@alexis,根據錯誤消息它已經在執行'decode'。我敢打賭,它跳過了,如果它已經給了Unicode。 –

+0

@MarkRansom:網頁上傳始終是字節流,以獲取必須解碼的Unicode。您無法從網絡請求接收Unicode。或者你聲稱UTF8是Unicode的;它是一種編碼,而不是標準或Python unicode值。 –

相關問題