ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

エクセルファイルの文字エンコーディング

前回つくったCSVファイルの文字エンコーディングUTF-8になっている。
UTF-8のファイルはエクセルでつかえない(つかいづらい)。
今回はエクセルの文字エンコーディングRubyの文字エンコーディングについて考える。

目次


エクセルの文字エンコーディング

エクセルデータの標準文字エンコーディングShift_JIS
それに対してRubyの標準文字エンコーディングUTF-8
なので、どこかで文字エンコーディングを変更しないとデータのやり取りができない。

Rubyで文字エンコーディングを変更する

エクセルでつくったCSVファイルをRubyに読み込む方法

わたしはエクセルを持っていないので、今回書くコードはエクセルでの動作確認をしていません。

次の画像のような表計算アプリファイルをsample.csvという名のCSVファイルに書き出す。

f:id:rowingfan:20180407130615p:plain

sample.csv

順位,クルー名,タイム
1,A会社,05:50.01
2,B大学,05:52.12
3,C大学,05:54.34


エクセルの標準設定だとCSVファイルに書き出すときの文字エンコーディングはShift-JISになっている。
これをRubyで読み込む。

test.rb

sample_csv = open("sample.csv","r:shift_jis")
sample_sjis = sample_csv.read
sample_utf8 = sample_sjis.encode("utf-8")
sample_csv.close
puts sample_utf8


コードの説明。

  • sample.csvを読み込みモードrに:shift_jisオプションをつけて開く
  • 開いたsample.csvをreadメソッドで読み込む
  • 読み込んだsample.csvの文字エンコーディングをencodeメソッドで変更する
  • 開いたファイルをcloseメソッドで閉じる
  • 読み込んだUTF-8ファイルをputsメソッドで出力する


実行結果は、上のsample.csvと同じ内容がターミナル/PowerShellに表示される。

エクセルで読み込めるCSVファイルをRubyでつくる

エクセルで読み込めるように文字エンコーディングがShift-JISのCSVファイルをつくる。

test.rb

str = "順位,クルー名,タイム\n1,A会社,05:50.01\n2,B大学,05:52.12\n3,C大学,05:54.34"

open("sample_sjis.csv","w:shift_jis") do |file|
    file.write str
end


コードの説明。

  • カンマ区切りの文字列データをつくる
  • sample_sjis.csvファイルを書き込みモードwに:shift_jisオプションをつけてつくる(開く)
  • つくった(開いた)CSVファイルにwriteメソッドでカンマ区切りデータを書き込む


上のコードでできたファイルはエクセルで読み込めるはず。

今回の動作確認環境

Ruby 2.4.3p205

macOS 10.13.3
ターミナル

Windows10
Windows PowerShell