顧客が提供する大規模なデータ ファイルを読み取るアプリがあります。いくつかのファイルで完全に動作しますが、今日受け取った 1 つのファイルで次のエラーが発生しています。
ArgumentError: invalid byte sequence in UTF-8
String.match を使用して正規表現パターンを探しています。
ファイルを見ると、動作するものと何も変わらないようです。
アドバイス?
編集: ユーザー名に「xE9」文字があるようです。
顧客が提供する大規模なデータ ファイルを読み取るアプリがあります。いくつかのファイルで完全に動作しますが、今日受け取った 1 つのファイルで次のエラーが発生しています。
ArgumentError: invalid byte sequence in UTF-8
String.match を使用して正規表現パターンを探しています。
ファイルを見ると、動作するものと何も変わらないようです。
アドバイス?
編集: ユーザー名に「xE9」文字があるようです。
@muistooshortの助けを借りて、ファイルをISOモードで開き、1行ずつ読み取り、UTF-8に変換しました。
myfile = File.open( 'thefile.txt', 'r:iso8859-1' )
while rawline = myfile.gets
line = rawline.force_encoding( 'utf-8' )
# proceed...
end
ソリューションを説明する小さなレーキ ジョブ:
task :reencode, [:filename] => [:environment] do |t, args|
myfile = File.open( args[:filename], 'r:iso8859-1' )
outfile = File.open( args[:filename] + ".out", "w+" )
while rawline = myfile.gets
line = rawline.force_encoding( 'utf-8' )
outfile.write line
end
outfile.close
end