我正在使用Ruby 1.9打开几个文件并将它们复制到一个存档中.现在有一些二进制文件,但有些文件不是.由于Ruby 1.9不能自动打开二进制文件作为二进制文件,有没有办法自动打开它们?(所以".class"是二进制的,".txt"不是)
Wol*_*old 36
实际上,Alex D之前的回答是不完整的.虽然在Unix文件系统中确实没有"文本"模式,但Ruby确实在二进制和非二进制模式下打开文件有所不同:
s = File.open('/tmp/test.jpg', 'r') { |io| io.read }
s.encoding
=> #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)
不同于(注意"rb")
s = File.open('/tmp/test.jpg', 'rb') { |io| io.read }
s.encoding
=> #<Encoding:ASCII-8BIT>
Run Code Online (Sandbox Code Playgroud)
正如文档所说,后者将外部编码设置为ASCII-8BIT,这告诉Ruby不要尝试解释UTF-8的结果.您可以通过显式设置编码来实现相同的功能s.force_encoding('ASCII-8BIT').如果您想将二进制文件读入字符串并移动它们(例如将它们保存到数据库等),这是关键.
KAR*_*ván 12
从Ruby 1.9.1开始,有一个单独的二进制读取方法(IO.binread),从1.9.3开始,还有一个用于写入(IO.binwrite):
阅读:
content = IO.binread(file)
Run Code Online (Sandbox Code Playgroud)
写作:
IO.binwrite(file, content)
Run Code Online (Sandbox Code Playgroud)
由于IO是父类File,您还可以执行以下操作,这可能更具表现力:
content = File.binread(file)
File.binwrite(file, content)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17114 次 |
| 最近记录: |