我想知道Tempfile
和File
的区别。
我发现:
require 'open-uri'
open('c:/boot.ini'){|file|
puts file.class #File
}
open('http://coderlee.cnblogs.com'){|file|
puts file.class #Tempfile
}
,当我将流保存到远程存储服务器时,Tempfile
会导致错误,似乎原因是编码不是ASCII-8BIT
为什么?
在第一种情况下,您正在从文件系统加载一个文件。这将创建一个File对象,使用文件名(它有一个)。
在第二种情况下,您正在打开指向远程文件的流。您的文件系统中没有关联的文件,但是如果要对其进行任何操作,则需要一个文件。因此,Ruby为您创建了一个具有唯一文件名的Tempfile,您甚至不需要知道这个文件名(因为资源本身没有名称)。它的行为就像一个File对象。
您检索的文档的编码由服务器控制。如果希望以不同的编码检索文档,则需要更改服务器上的编码。