0

ファイルからテキストを読み取ってデータベースに保存したい。そこで、テストするファイルの内容を出力するためだけにサンプルコードを作成しました。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、エンコーディングの問題のためにメソッドが一致するものを見つけることができないようです。そのため、空の配列を取得します。どうすればこれを修正できますか?助言がありますか?

4

2 に答える 2

0

入れてみてください

# encoding: utf-8

Rakefileの最初の行に。RubyインタープリターにUTF8文字を処理するように指示する必要があります...また、force_encodingを使用すると、より良いチャンスが得られます。

于 2012-11-10T09:25:25.990 に答える
0

ページで解決策を見つけました。したがって、私のコードは次のようになります。

task :seed => :environment do
  Dir.glob("#{Rails.root}/public/mktu/*.txt") do |file|
    ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
    items = []

    puts "Creating mktu class #{File.basename(file, '.txt')}"

    klass = MktuClass.create!(:title => "Класс #{File.basename(file, '.txt')}")

    file = File.open(file, "r")
    data = ic.iconv(file.read)

    data.split(";").each do |item|
      MktuItem.create!(:name => item.strip, :mktu_class_id => klass.id)
      puts item
    end
  end
end

手伝ってくれてありがとう!

于 2012-11-10T14:21:51.197 に答える