RubyのNKFモジュールとFileクラスとPathnameクラスを使ってファイルの文字コードを調べる

こんにちは!kossyです!




さて、今回はRubyNKFモジュールとFileクラスとPathnameクラスを使って、
ファイルの文字コードを調べる方法にについて、ブログに残してみたいと思います。



環境

Ruby 2.6.3
Rails 6.0.3
MacOS Mojave



手順

大まかな手順は以下の通りです。

1. pathnameクラスを使ってfile_pathを定義

2. Fileクラスのreadメソッドでファイルを読み込む

3. NKFクラスのguessメソッドで文字コードを調べる

です。ではコンソールで試してみます。


/tmpディレクトリに適当なファイルを配置します。
今回は、sample.txt を配置

> file_path = Pathname.new('./tmp/sample.txt')

> file = File.read(file_path)

> require 'nkf'

> NKF.guess(file).to_s 
=> 'UTF-8'

上記のようなやり方で、文字コードを確認できます。



ユースケース

実務で使うとしたら、アップロードされようとしているCSVデータの文字コードによって処理を分岐する、といった使い方があるかと思います。

require 'nkf'

file_path = Pathname.new('./tmp/sample.csv')

csv_file =
  if NKF.guess(File.read(file_path)).to_s == 'Shift_JIS'
     CSV.read(file_path, encoding: 'cp932')
  else
    CSV.read(file_path)
  end

勉強になりました。

参考にさせていただいたサイト