赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
回复 星之璇 的帖子
这个是 Ruby 1.9 才有的功能,RM 用的是 Ruby 1.8,并不支持这种文件打开的模式
那就比如,某文本文件是utf-16的编码,我该如何读取呢? ruby下输入了个File.public_methods……瞬间晕了,没找到
如果本来就是 UTF-16,那就不需要 MultiByteToWideChar 了(已经是宽字符 Wide character),获取数据后直接 WideCharToMultiByte 转到 UTF-8:
str = ''
open("filename") { |fin|
str = fin.read
}
WideCharToMultiByte.call(...) # 把 str 从 UTF-16 转码到 UTF-8
在 Ruby 里类本身也是对象,是 Class 类型的对象,而 public_methods 是返回接收者对象的公有实例方法,你这里指定的接收者是 File,File 是一个 Class 对象,所以这里返回给你的是该 Class 对象,包括其基类的实例方法
我之前说的 IO#read 是 IO 类实例的实例方法,“类#方法”表示类的实例方法,而不是类本身这个 Class 对象的实例方法(也就是其它语言中的静态方法)
File 是 IO 的子类,所以也继承了 IO#read方法
你想要的是 File 类的实例方法,可以通过 instance_methods 来返回某个类的实例方法(或者已经有了一个 File 的实例对象,就可以让这个对象作为接受者调用 public_methods):File.instance_methods
当然凭人眼想要在这么一堆没有换行的方法名里浏览不是什么轻松的事,这里为了演示 read 确实是 File 的实例方法,可以尝试运行 p File.instance_methods.include?("read")
|
|