logo
Loading...

讀取CSV預設編碼錯誤問題 - Cupoy

各位好:我想跟詢問,我在Day002_Sample.ipynb依照順序執行時,突然到這一段跳出了ER...

讀取CSV預設編碼錯誤問題

2019/11/26 下午 11:58
Python網路爬蟲討論版
Shen Bo-Ren
觀看數:68
回答數:2
收藏數:1

各位好:

我想跟詢問,我在Day002_Sample.ipynb依照順序執行時,突然到這一段跳出了ERROR。

這個example.csv也是從上課講義上下載下來的csv檔。

請問是哪裡的編碼需要進行調整嗎?


fh = open("./data/example.csv")

f = fh.read()

fh.close()


print(f)

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-4-544ebfe30082> in <module>
     1 fh = open("./data/example.csv")
----> 2 f = fh.read()
     3 fh.close()
     4
     5 print(f)

UnicodeDecodeError: 'cp950' codec can't decode byte 0x8f in position 2: illegal multibyte sequence

回答列表

  • 2019/11/27 上午 00:11
    楊哲寧
    贊同數:0
    不贊同數:0
    留言數:1

    這是預設編碼不支援的問題,可以將open function 裡的 encoding 設定成'utf-8'

  • 2019/11/27 上午 01:46
    張維元 (WeiYuan)
    贊同數:2
    不贊同數:1
    留言數:0

    嗨,這個部分是讀檔的時候預設的編碼方式跟實際內容不同導致的錯誤。


    不管你是用 Python 原生的 open/read 或是 Pandas 提供的 read_csv 方法,都可以再開檔的時候指定 encoding 參數。


    假設要使用 utf-8 編碼方式存取檔案,使用方法如下:


    ```

    encoding ='utf-8'

    f =open('filename.txt','r', encoding=encoding)

    text = f.read()

    f.close()

    ```


    另外一種常見的問題是,可能不知道原始檔案的編碼方式為何,可以透過 chardet 工具來查詢:


    ```

    import chardet

    with open('filename.txt','rb')as f:

           result = chardet.detect(f.read())

    ```


    最後科普一下幾種常見的編碼格式:

    * Unicode/UTF8:萬國碼,可支援多種語言的編碼格式

    * ISO-8859-1/latin1:主要用於歐系國家的文字

    * Big5:繁體中文

    * GBK:簡體中文

    * cp950:windows 預設的編碼