日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

發布時間:2023/12/10 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先舉個例子,分別以不指定編碼、指定編碼為 utf-8、指定編碼為 utf-8-sig 三種方式來做比較,再將寫入 csv 文件和 txt 文件來做個對比


一、不指定編碼方式,直接存入 csv 文件

import csvwith open('test.csv', 'w') as fp:writer = csv.writer(fp)writer.writerow(['漢語', '俄語', '韓語', '日語', '英語'])writer.writerow(['愛你', 'люблю тебя', '????', '愛しています', 'love you'])

此時運行程序會報以下錯誤:

UnicodeEncodeError: 'gbk' codec can't encode character '\uc0ac' in position 14: illegal multibyte sequence

二、指定編碼為 utf-8,再存入 csv 文件

接下來嘗試將內容以 utf-8 編碼方式存入 test.csv 文件中,可以看到除了英文,其他的全都是亂碼:

import csvwith open('test.csv', 'w', encoding='utf-8') as fp:writer = csv.writer(fp)writer.writerow(['漢語', '俄語', '韓語', '日語', '英語'])writer.writerow(['愛你', 'люблю тебя', '????', '愛しています', 'love you'])


三、指定編碼為 utf-8-sig,再存入 csv 文件

當將編碼方式換成 utf-8-sig 之后,顯示為正常:

import csvwith open('test.csv', 'w', encoding='utf-8-sig') as fp:writer = csv.writer(fp)writer.writerow(['漢語', '俄語', '韓語', '日語', '英語'])writer.writerow(['愛你', 'люблю тебя', '????', '愛しています', 'love you'])


四、不指定編碼方式,直接存入 txt 文件

with open('test.txt','w') as fp:fp.write('愛你, люблю тебя, ????, 愛しています, love you')

和存入 csv 文件一樣,也會報以下錯誤:

UnicodeEncodeError: 'gbk' codec can't encode character '\uc0ac' in position 16: illegal multibyte sequence

五、指定編碼為 utf-8 / utf-8-sig,再存入 txt 文件

以 utf-8 或者 utf-8-sig 編碼方式存入 test.txt 文件中,內容都是完全正常的:

with open('test.txt','w', encoding='utf-8') as fp:fp.write('愛你, люблю тебя, ????, 愛しています, love you') with open('test.txt','w', encoding='utf-8-sig') as fp:fp.write('愛你, люблю тебя, ????, 愛しています, love you')


utf-8 與 utf-8-sig 有什么區別?

  • utf-8 以字節為編碼單元,它的字節順序在所有系統中都是一樣的,沒有字節序問題,也因此它實際上并不需要 BOM;

  • uft-8-sig 中 sig 全拼為 signature,即帶有簽名的 utf-8(UTF-8 with BOM);

  • BOM 全稱 ByteOrder Mark,字節順序標記,出現在文本文件頭部,Unicode編碼標準中用于標識文件是采用哪種格式的編碼。

為什么寫入 csv 文件要用 utf-8-sig 編碼?

  • Excel 在讀取 csv 文件的時候是通過讀取文件頭上的 BOM 來識別編碼的,如果文件頭無 BOM 信息,則默認按照 Unicode 編碼讀取。

  • 當我們使用 utf-8 編碼來生成 csv 文件的時候,并沒有生成 BOM 信息,Excel 就會自動按照 Unicode 編碼讀取,就會出現亂碼問題了。

為什么寫入 txt 文件要用 utf-8 編碼?

  • 在寫入 txt 文件時,Windows 會默認轉碼成 gbk,遇到某些 gbk 不支持的字符就會報錯,在打開文件時就聲明編碼方式為 utf-8 就能避免這個錯誤。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。