logo
Loading...

出現'cp950' codec can't decode byte 0xba in position 4: illegal multibyte sequence 錯誤 - Cupoy

請問出現這一行結果是代表什麼意思,該如何解決?UnicodeDecodeError: 'cp950'...

pycrawler,pycrawler-d02

出現'cp950' codec can't decode byte 0xba in position 4: illegal multibyte sequence 錯誤

2019/11/18 下午 09:43
Python網路爬蟲討論版
呂炎哲
觀看數:1134
回答數:3
收藏數:4
pycrawler
pycrawler-d02

請問出現這一行結果是代表什麼意思,該如何解決?


UnicodeDecodeError: 'cp950' codec can't decode byte 0xba in position 4: illegal multibyte sequence 


下面是代碼

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

f = fh.read()   <-------------------------這行報錯

fh.close()


print(f)

回答列表

  • 2019/11/19 上午 10:06
    倪瑋晟
    贊同數:3
    不贊同數:0
    留言數:0

    在 open 的地方加上編碼(encoding='utf-8')就可以了

    例如:


    fh = open("./data/example.csv",encoding='utf-8')

    f = fh.read() 

    fh.close()

  • 2019/11/19 下午 09:42
    張維元 (WeiYuan)
    贊同數:4
    不贊同數:0
    留言數:0

    嗨,這個原因是因為 windows 環境的檔案預設會存成「cp950」的編碼,在 Python 中讀檔會失敗。解法可以在用以下的方式指定編碼:


    ```

    open("./data/example.csv", encoding='utf-8')

    ```


    另外一種常見的問題是,可能不知道原始檔案的編碼方式為何,可以透過 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 預設的編碼,但程式不支援

  • 2019/11/20 上午 02:46
    Jeffrey
    贊同數:1
    不贊同數:1
    留言數:0

    將f = open("./data/example.csv", "r")改成f = open("./data/example.csv", "r",encoding="utf-8")試試