2016-09-01 3 views
1

서버에서 파일을 다운로드하면 내 코드루비 넷 :: FTP는 - 여기 루비의 순 :: FTP 클래스를 사용하여 I 원격 서버의 특정 파일을 다운로드하려고

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 기능이 사용되는지 확인하십시오. 유래에 대한 기존 응답에서

: 당신은 단지 UTF8로 문자열을 인코딩하고 FTP 서버에 파일 이름으로 보낼 수 있도록

는 충분하지 않습니다. 이전에는 모든 FTP 서버가 ASCII 만 이해했으며 요즘은 유니 코드를 인식 할지라도 이전 버전과의 호환성을 유지하기 위해 모든 파일 이름을 ASCII로 처리하기 시작합니다.

모든 것을 작동 시키려면 (프로그램) 먼저 서버가 할 수있는 기능을 확인해야합니다. 서버는 클라이언트가 연결되면 기능을 전송합니다. 귀하의 경우에는 FEAT UTF8을 확인해야합니다. 서버가이를 전송하면 UTF8을 이해한다는 의미입니다. 그럼에도 불구하고 이해하더라도 UTF8로 인코딩 된 파일 이름을 보내고 프로그램에서 부족한 내용을 명시해야합니다 (명시한대로 서버가 utf8을 지원하므로).

클라이언트가 FTP 서버에 OPTS UTF8을으로 보내야합니다. 전송 후 UTF8을 사용하거나 UTF8-ish를 말할 수 있습니다 (말하자면).

자세한 Internationalization of the File Transfer Protocol 여기를 읽어

출처 :

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

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

관련 문제