Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby Net::FTP-从服务器下载文件_Ruby On Rails_Ruby_Ftp_Shift Jis - Fatal编程技术网

Ruby on rails Ruby Net::FTP-从服务器下载文件

Ruby on rails Ruby Net::FTP-从服务器下载文件,ruby-on-rails,ruby,ftp,shift-jis,Ruby On Rails,Ruby,Ftp,Shift Jis,我正在尝试使用Ruby的Net::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

我正在尝试使用Ruby的Net::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>'
$ruby ftp\u download.rb
/usr/local/lib/ruby/2.3.0/net/ftp.rb:340:in`getresp':451目标多字节代码页中不存在Unicode字符的映射。(网络::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层)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'
从/usr/local/lib/ruby/2.3.0/net/ftp.rb:632:in'getbinaryfile'
从ftp_下载。rb:26:in`'
标记目标文件已编码

我做错了什么?非常感谢任何帮助!谢谢

错误消息来自FTP服务器。问题是FTP服务器无法解释这些unicode文件名。请检查是否为连接启用了UTF8功能

根据stackoverflow的现有答案:

仅仅将字符串编码为UTF8并将其作为文件名发送到FTP服务器是不够的。在过去,所有FTP服务器只理解ASCII,而现在,即使它们知道Unicode,也要保持向后兼容性。当它们开始使用时,它们也将所有文件名视为ASCII

要使所有这些工作正常,您(您的程序)必须首先检查服务器的功能。服务器在客户端连接后发送其功能-在您的情况下,您必须检查FEAT UTF8。如果您的服务器发送该消息,则表示它理解UTF8。尽管如此,即使它理解,您也必须明确告诉它,从现在起,您将发送文件名UTF8编码,而现在它是您的程序缺少的东西(正如您所述,您的服务器支持UTF8)

您的客户端必须向FTP服务器发送以下选项UTF8 ON。发送后,您可以使用UTF8或对您的服务器说UTF8(可以这么说)

请阅读此处了解详细信息

资料来源:


标记目标文件是SJIS编码的。问题很可能是文件名,而不是文件内容。@Leon是的,问题是文件名中的unicode字符
ftp.list
返回的位置是什么?