0

iconv ツールに問題があります。私はそのようにrakeファイルからそれを呼び出そうとします:

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

ただし、1 つのファイルが部分的に変換されます (部分的に変換されるサイズ: 10059092 バイト、変換前: 10081854)。この 2 つのファイルを比較すると、すべてのコンテンツが ASCII で書き込まれたわけではないことがわかります。このコマンドをシェルから明示的に呼び出すと、完全に機能します。他の小さなファイルは問題なく変換されます。iconv や Ruby の system() に制限はありますか?

4

1 に答える 1

0

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

適切なエラーチェックが追加されています。

于 2010-04-30T08:29:28.203 に答える