Вызов iconv из Ruby через систему () - PullRequest
0 голосов
/ 30 апреля 2010

У меня проблема с инструментом iconv.Я пытаюсь вызвать его из файла rake следующим образом:

Dir.glob("*.txt") do |file|
  system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{ file } >> ascii_#{ file }")
end

Но один файл преобразован частично (размер частично преобразован: 10059092 байта, до преобразования: 10081854).Сравнение этих двух файлов доказывает, что не весь контент был записан в ASCII.Когда я вызываю эту команду явным образом из оболочки, она работает отлично.Другие меньшие файлы конвертируются без проблем.Есть ли какие-либо ограничения на iconv или систему Ruby ()?

1 Ответ

0 голосов
/ 30 апреля 2010

Это всегда хорошая идея проверить возвращаемое значение system , чтобы определить, было ли оно успешным.

Dir.glob("*.txt") do |file|
  system("iconv -f UTF-8 -t 'ASCII//TRANSLIT' #{file} >> ascii_#{file}") or
    puts "iconv failed for file #{file}: #{$?}"
end

Вы также можете попробовать использовать стандартную библиотеку Iconv и таким образом избавиться от системного вызова:

require 'iconv'

source_file = 'utf8.txt'
target_file = 'ascii.txt'

File.open(target_file, 'w') do |file|
  File.open(source_file).each_line do |line|
    file.write Iconv.conv('ASCII//TRANSLIT', 'UTF-8', line)
  end
end

с соответствующей проверкой ошибок добавлено.

...