1. 程式人生 > >Python2寫CSV無法MS Excel開啟亂碼

Python2寫CSV無法MS Excel開啟亂碼

Python2處理漢字一直是個很讓人頭疼的問題。

首先,要在程式開頭加上如下一行,否則漢字變亂碼;

#-*- coding: utf-8 -*-

其次,處理漢字字串時候,有時候需要 str.encode("utf-8") 轉碼或者先解碼再轉碼 str.decode("GBK").encode("utf-8");

然後,真的要寫帶漢字的檔案了,直接write出來的貌似也不能直接看懂... 需要引入其它包

import codecs

# 
# your functions
# ......
#

fh = codecs.open("yourfile", "w", "utf-8")
fh.write(filecontent)
fh.close()

最後,奇葩的事情在MS Excel裡出現了!

本來很簡單一件事,寫一個CSV(Comma-Separated Values)檔案,用Excel開啟。

直接codecs寫的檔案,用MS Excel開啟時候會提示格式不對,任性開啟也會是漢字變亂碼。但是同一個檔案在記事本、Editplus、UltraEdit甚至iOS的Numbers裡開啟都是正常的。

核心問題是需要先寫一個檔案頭,u"\ufeff"。然後,該怎麼辦怎麼辦。

三種解決方法,方法一:還是用codecs

import codecs

# 
# your functions
# 先把csv檔案內容按照“逗號分隔,換行回車”寫好
# ......

fh = codecs.open("yourfile.csv","w","utf-8")
fh.write(u"\ufeff")
fh.write(csvstr)
fh.close()
# Done

方法二:不引用額外包,直接write

# 
# your functions
# 先把csv檔案內容按照“逗號分隔,換行回車”寫好
# ......
#

fh = open("yourfile.csv", "w")
fh.write(u"\ufeff") #某些系統中需要改成 fh.write(u"\ufeff".encode('utf-8'))
fh.write(csvstr.encode("utf-8")) #簡單粗暴地直接所有都轉碼。
fh.close()

這樣處理,不會有問題了。生成的檔案MS Excel直接開啟,漢字準確無誤。 方法三:直接用CSV模組
#coding=utf-8

import csv

csvfh = open('test1.csv', 'w')
csvfh.write(u"\ufeff".encode("utf-8"))
w = csv.writer(csvfh)

w.writerow(["編號","用例","結果"])
content = [
    ('1','試驗1','通過'),
    ('2','試驗2','失敗')
]
w.writerows(content)
csvfh.close()

 

相關推薦

Python2CSV無法MS Excel開啟亂碼

Python2處理漢字一直是個很讓人頭疼的問題。 首先,要在程式開頭加上如下一行,否則漢字變亂碼; #-*- coding: utf-8 -*- 其次,處理漢字字串時候,有時候需要 str.encode("utf-8") 轉碼或者先解碼再轉碼 str.decode("GBK

java寫入CSV檔案後Excel開啟亂碼的問題

使用java寫入csv檔案,並且檔案編碼也設成了“UTF-8”: File file = new File("a.csv"); OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file

python筆記5-python2csv文件中文亂碼問題

tde unicode編碼 [] utf set 分享圖片 lis ber utf-8 前言 python2最大的坑在於中文編碼問題,遇到中文報錯首先加u,再各種encode、decode。當list、tuple、dict裏面有中文時,打印出來的是Unicode編碼,這個是

系統開發總結第一篇--javaweb匯出csv,並且解決用excel開啟亂碼問題

離開得太久了今天小毛驢又要重新迴歸部落格了!前段時間一直在團隊裡打雜,接下來對於系統開發中遇到的些許問題做一些總結。 1、首先javaweb如何從資料庫獲取資料並從客戶端匯出csv檔案 1)在jsp頁面上新增這兩個函式,只要設定個button按鈕然後click事件即可,用其他顏色標註的是需要

csv 檔案使用excel開啟, 數字使用了科學計數法的問題解決

本人不才, 資料庫匯出的資料儲存成csv 格式,  excel 開啟後  , 數字型別被科學計數法表示,好鬱悶哦 , 大長串的數字 被當成了數值型別, 好鬱悶....... 小數字沒有問題可是大數字

在mac下,用excel開啟csv檔案出現中文亂碼的情況

解決,在mac下,用excel開啟csv檔案出現中文亂碼的情況 方法就是用python轉換檔案編碼方式 在python命令列下: 首先,讀取檔案: with open('dianying.csv', 'r') as f: dy=f.read() print f.read() 其

Excel開啟csv檔案亂碼問題

現象  UTF-8編碼的檔案,記事本、Sublime等開啟正常,excel開啟亂碼,如下如所示: 原因  csv檔案沒有UTF8 BOM頭部,excel需要BOM頭來識別檔案的編碼方式,如果沒有宣告,則會出現亂碼的問題; 解決方案  在檔案的最前面新增UTF8 BO

PHP 用fputcsv()生成csv檔案在windows Excel開啟亂碼問題解決

參考該文章https://segmentfault.com/a/1190000005366832 生成csv,csv檔案在windows wps和我ubuntu16桌面版下開啟正常。但是使用window

linux伺服器上下載的csv檔案在window環境下用excel開啟亂碼問題解決

【問題產生原因】 Excel預設並不是以UTF-8來開啟檔案,所以在csv開頭加入BOM,告訴Excel檔案使用utf-8的編碼方式。 【核心程式碼】 response.setContentType

csvexcel開啟亂碼的解決方法

一、問題描述 開啟excel開啟csv表格亂碼: 發現中文亂碼了。 二、解決辦法 發現右鍵記事本開啟卻能正常顯示 這個原因是因為csv檔案沒有預設使用utf-8,首先下載一個notepad++,安裝好之後右鍵使用notepad++開啟 在

解決 Excel 開啟 UTF-8 編碼 CSV 檔案亂碼的 BUG

亂碼恢復 http://www.mytju.com/classcode/tools/messycoderecover.asp   直接用 Excel 開啟 UTF-8 編碼的 CSV 檔案會導致漢字部分出現亂碼。 原因是 Excel 以 ANSI 格式開啟,不會做編碼識別。 開啟 UTF-

JAVA以UTF-8匯出CSV檔案,用excel開啟產生亂碼的解決方法

先上一段程式碼(上好的程式碼,多年陳釀) OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8"); // 要輸出的內容 result = (String)co

EXCEL開啟csv檔案中文亂碼,以及匯入資料庫中文亂碼

1.將csv檔案用notepad++開啟,選擇encoding列表,選擇encode in UTF-8-BOM編碼方式,點集儲存,再次用EXCEL開啟就可以正常顯示 2.將上述的csv檔案匯入SQL中,選址65001(UTF—8)編碼方式,並在高階那一項將帶有中文的那一列的

tableau匯出資料為csv檔案後,用excel開啟亂碼怎麼辦?

原因:  csv檔案為utf-8編碼,excel為ansi編碼,所以用excel開啟csv檔案會亂碼。 解決辦法:         把csv檔案在TXT(記事本)開啟,開啟後,另存為ansi編碼,重新開啟csv檔案,就不會亂碼了。

java輸出utf-8的csv檔案時,檔案中有中文,excel開啟檔案亂碼問題解決

1.utf-8的檔案分為兩種一種是有bom,一種是無bom。java輸出的utf-8的檔案時無bom的。由於excel開啟無bom的utf-8 csv檔案時就會出現中文亂碼, 即使中文輸出時採用了utf-8也不行。所以在輸出csv檔案時要加上bom頭。 2.用如下程式碼新增

解決程式碼儲存csv後,用Excel開啟中文亂碼問題。

Java程式碼 OutputStream out = new FileOutputStream(file); OutputStreamWriter writer = new OutputStream

EXCEL開啟CSV檔案亂碼的解決方法

【故障現象描述】 從網頁上匯出資料檔案儲存為CSV格式的檔案,使用記事本開啟文字顯示沒有問題,使用EXCEL打開出現亂碼的情況。 【故障原因分析】 此種情況一般是匯出的檔案編碼的問題。在簡體中文環境下,EXCEL開啟的CSV檔案預設是ANSI編碼,如果CSV檔案的編碼方式為utf-8、Unicode等編碼

用pythonCSVEXCEL文件

() import exce 讀取 key print tput save style import pandas as pd writer = pd.ExcelWriter(‘output.xlsx‘) df1 = pd.DataFrame(data={‘col1‘:[

Python讀excel練習_去除excel亂碼行,並添加列

寫入excel continue delete val value urn com date add 需求: 把app_student.xls裏面的數據, 1、如果這一行數據裏面有亂碼(及包含?),那麽就刪掉 2、再加上一列,是否畢業 3、如果班級是天蠍座

處理Python2.7讀文件中的中文亂碼問題

創建 文本文件 odi 出現 print 文本 處理 ecs 報錯 1.設置默認編碼 在Python代碼中的任何地方出現中文,編譯時都會報錯,這時可以在代碼的首行添加相應說明,明確utf-8編碼格式,可以解決一般情況下的中文報錯。當然,編程中遇到具體問題還需具體分析啦。 #