ファイルからテキストを読み取ってデータベースに保存したい。そこで、テストするファイルの内容を出力するためだけにサンプルコードを作成しました。Ruby on Railsアプリケーションで次のレーキタスクがあります:
require "active_support/core_ext/string"
namespace :mktu do
task :seed do
Dir.glob("#{Rails.root}/public/mktu/*.txt") do |file|
puts "#{File.basename(file, ".txt")}"
data = File.open(file, "r").read
p data.encoding.name
break_char = ";".encode("UTF-8")
data.mb_chars.split(break_char) do |name|
puts name.strip
end
end
end
end
これが私の「rakemktu:seed--trace」の出力です。
** Invoke mktu:seed (first_time)
** Execute mktu:seed
32
"UTF-8"
rake aborted!
invalid byte sequence in UTF-8
/home/dastan/Projects/rails/tmregister/lib/tasks/prepare.rake:32:in `split'
/home/dastan/Projects/rails/tmregister/lib/tasks/prepare.rake:32:in `block (3 levels) in <top (required)>'
/home/dastan/Projects/rails/tmregister/lib/tasks/prepare.rake:25:in `glob'
/home/dastan/Projects/rails/tmregister/lib/tasks/prepare.rake:25:in `block (2 levels) in <top (required)>'
私の出力はファイルがUTF-8エンコーディングを持っていることを示していますがsplit
、エンコーディングの問題のためにメソッドが一致するものを見つけることができないようです。そのため、空の配列を取得します。どうすればこれを修正できますか?助言がありますか?