2016-09-01 6 views
1

サーバーからファイルをダウンロードすると、私のコードルビーはNet :: FTPは - ここではRubyのネット:: FTPクラスを使用して、私は、リモートサーバから特定のファイルをダウンロードしようとしています

require 'net/ftp' 
ftp = Net::FTP.new 
ftp.connect('mydomain', '21') 
ftp.login('username', 'password') 
ftp.passive = true 

    ftp.chdir("testing") 

    ftp.getbinaryfile('個人情報.csv', 'test1.csv') 
    puts "#{Time.now} > Downloaded 個人情報.csv." 

    ftp.getbinaryfile('住所.csv', 'test2.csv') 
    puts "#{Time.now} > Downloaded 住所.csv" 

ftp.close 

私は次のエラーを取得していますです

$ ruby ftp_download.rb 

/usr/local/lib/ruby/2.3.0/net/ftp.rb:340:in `getresp': 451 No mapping for the Unicode character exists in the target multi-byte code page. (Net::FTPTempError) 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:367:in `block in sendcmd' 
    from /usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:365:in `sendcmd' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:424:in `transfercmd' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:501:in `block (2 levels) in retrbinary' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:214:in `with_binary' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:499:in `block in retrbinary' 
    from /usr/local/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:498:in `retrbinary' 
    from /usr/local/lib/ruby/2.3.0/net/ftp.rb:632:in `getbinaryfile' 
    from ftp_download.rb:26:in `<main>' 

tagrgetファイルはSJISです。
何が間違っていますか?どのような助けが非常に感謝!ありがとうございます

+0

* tagrgetファイルはSJISエンコードされている*問題は、ファイル名ではなくファイルを使用して最も可能性が高いです。内容 – Leon

+0

@Leonはい問題はファイル名のユニコード文字である –

+0

場所で 'ftp.list'は何を返しますか? –

答えて

1

エラーメッセージは、FTPサーバーからのものです。問題は、FTPサーバーがこれらのユニコードのファイル名を解釈できないことです。接続にUTF8機能が有効になっているかどうかを確認してください。 stackoverflowの上の既存の回答から

は、あなただけUTF8として、あなたの文字列をエンコードし、FTPサーバへのファイル名としてそれを送信するために十分ではありません。以前はすべてのFTPサーバーがASCIIのみを理解していましたが、現在ではUnicode対応であっても下位互換性を維持するために、すべてのファイルをASCIIで扱います。

すべての機能を有効にするには、プログラムが自分のサーバーで可能な機能を確認する必要があります。サーバーは、クライアントが接続した後に機能を送信します。その場合、FEAT UTF8を確認する必要があります。あなたのサーバーがそれを送るなら、それはUTF8を理解していることを意味します。それにもかかわらず、あなたが理解していても、今からあなたのファイル名をUTF8でエンコードして送信することを明示しなければなりません。

お客様のクライアントは、OPTS UTF8 ONをFTPサーバーに送信する必要があります。それを送信した後、UTF8を使用するか、またはあなたのサーバーにUTF8-ishを話すことができます。

詳細 Internationalization of the File Transfer Protocolについてはこちらをお読み

ソースは:

https://stackoverflow.com/a/19903611/1305200

https://wiki.filezilla-project.org/Character_Encoding

関連する問題