Q1: 下載下來的CSV檔案(UTF-8格式),在Windows下,使用Excel直接打開都是亂碼?
Windows解決祕技:
- 先用"筆記本"打開CSV檔案,可以看到中文是正常,選擇另存新檔,編碼選擇ANSI後存檔
- 再使用Excel打開重新編碼後的CSV檔案,中文就可以正常顯示
問題發生的原因:
為什麼"筆記本"可以正常打開顯示中文,Excel卻沒有辦法,
研究後發現Excel只接受有BOM表頭的UTF-8檔案,否則中文無法正常顯示,
這點只能怪微軟作手腳,也無可奈何。
所以除非把CSV(UTF-8)檔案加上BOM表頭,否則Excel無法正常打開。
Windows下的vbscript的解法:
- 為了下載的CSV (UTF-8)檔案,沒有辦法打開,於是寫了一個vbscript (csv_addbom_v3.vbs),可以用滑鼠把下載的CSV檔案,丟到這個csv_addbom_v3.vbs,就可以自動轉檔成有BOM表頭的CSV檔案
從源頭下載的程式著手:
Ruby/Rails
Solution1:
直接在程式中,先塞入BOM表頭
最後產生有BOM表頭, UTF-8編碼的CSV檔案
# excel csv fromat (BOM + UTF8) def export_csv_excel .... # Add BOM to make excel using utf8 to open csv file head = 'EF BB BF'.split(' ').map{|a|a.hex.chr}.join() csv_str = CSV.generate(csv = head) do |csv| csv << [ , , , ...] @invoices.each do |invoice| csv << [ , , , ...] end end send_data csv_str, filename: "Invoices-#{Time.now.strftime("%y%m%d%H%M%S")}.csv", type: "text/csv" end
Solution2:
使用xml格式, 存成附檔名.xls
reference to
http://railscasts.com/episodes/362-exporting-csv-and-excel
Q2. 下載的CSV檔案,使用Excel打開後,電話欄位的0開頭,總是會被去掉?
把電話資料改成
="0988-888-888"
從源頭下載的程式著手:
Ruby/Rails
"=\"#{invoice.attendee.try(:mobile)}\""