2016-09-23 6 views
0

私はRails 4.2.7を使用しています。私はダウンロードして書いてウェブからのPDFコンテンツを、そう...Rubyでは、UTF以外の8文字をPDFコンテンツで扱うにはどうすればよいですか?

res1 = Net::HTTP.SOCKSProxy('127.0.0.1', 50001).start(uri.host, uri.port) do |http| 
     puts "launching #{uri}" 
     resp = http.get(uri) 
     status = resp.code 
     content = resp.body 
     content_type = resp['content-type'] 
     content_encoding = resp['content-encoding'] 
    end 
… 
    if content_type == 'application/pdf' || content_type.include?('application/x-javascript') 
    File.open(file_location, "w") { |file| file.write content } 

のように私はそれを考慮してみましたいくつかのコンテンツのために、私は

以下のエラーを取得すること
Error during processing: "\xC2" from ASCII-8BIT to UTF-8 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_service.rb:8:in `write' 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_service.rb:8:in `block in pre_process_data' 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_service.rb:8:in `open' 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_service.rb:8:in `pre_process_data' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:76:in `process_race_data' 
/Users/davea/Documents/workspace/myproject/app/services/onlinerr_race_finder_service.rb:75:in `process_race_link' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_race_finder_service.rb:29:in `block in process_data' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_race_finder_service.rb:28:in `each' 
/Users/davea/Documents/workspace/myproject/app/services/abstract_race_finder_service.rb:28:in `process_data' 
/Users/davea/Documents/workspace/myproject/app/services/run_crawlers_service.rb:18:in `block in run_all_crawlers' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each' 

を気づいによるよそう...

File.open(file_location, "w") { |file| file.write content } 
content.encode('UTF-8', :invalid => :replace, :undef => :replace) 

のように、無効な文字を置き換えることが、その後、私はエラーに

error: PDF malformed, expected 'endstream' but found 0 instead 
を取得

PDFファイルを読むとき。誰かがそれらを壊さないPDFドキュメントをダウンロードする方が良い方法を知っていますか?あなたが受け取るファイルが異なるエンコーディングであるかもしれない場合、失敗する可能性がありますその場合は、私がしようとし

File.binwrite(file_location, content) 

以上:

答えて

0

私は、最も簡単な解決策はIO#binwriteを使用しているとして、それを書くことだと思います

content.force_encoding(Encoding::ISO_8859_1).encode(Encoding::UTF_8) 
関連する問題