赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
本帖最后由 紫苏 于 2009-8-25 23:13 编辑
- #==============================================================================
- # ■ String
- #------------------------------------------------------------------------------
- # 字符串类。可处理任意长度的字节串。(追加编码转换的定义)
- #==============================================================================
- class String
- #--------------------------------------------------------------------------
- # ● 用来编码 Ruby 字符串、解码 unicode 的 两个 Windows API 函数
- #--------------------------------------------------------------------------
- @@MultiByteToWideChar = Win32API.new("kernel32", "MultiByteToWideChar", ['I', 'L', 'P', 'I', 'P', 'I'], 'I')
- @@WideCharToMultiByte = Win32API.new("kernel32", "WideCharToMultiByte", ['I', 'L', 'P', 'I', 'P', 'I', 'P', 'P'], 'I')
- #--------------------------------------------------------------------------
- # ● 返回将 Ruby UTF-8 字符串对象(本身)编码为 unicode 后的字符串
- #--------------------------------------------------------------------------
- def to_unicode
- len = @@MultiByteToWideChar.call(65001, 0, self, -1, 0, 0) << 1
- buf =" " * len
- # 65001: UTF-8 字符集编码(代码页)
- @@MultiByteToWideChar.call(65001, 0, self, -1, buf, len)
- return buf
- end
- #--------------------------------------------------------------------------
- # ● 返回将编码为 unicode 的字符串对象(本身)解码为 UTF-8 后的字符串
- #--------------------------------------------------------------------------
- def to_UTF8
- len = @@WideCharToMultiByte.call(65001, 0, self, -1, 0, 0, 0, 0)
- buf =" " * len
- @@WideCharToMultiByte.call(65001, 0, self, -1, buf, len, 0, 0)
- # 去掉 '\0' 字符串结束符(因为转换之后仅仅用于 Ruby 字符串)
- buf.slice!(-1, 1)
- return buf
- end
- end
- FindFirstFile = Win32API.new("kernel32", "FindFirstFileW", "PP", "L")
- FindNextFile = Win32API.new("kernel32", "FindNextFileW", "LP", "I")
- filenames = []
- findFileData = " " * 592
- hFindFile = FindFirstFile.call(
- "\\\\?\\C:\\TDDOWNLOAD\\孢子完整简体中文版@圣城家园@圣风\\孢子完整简体中文版\\孢子\\*".to_unicode, findFileData)
- while FindNextFile.call(hFindFile, findFileData) != 0
- filenames.push(findFileData[44, 45 + 260 * 2].to_UTF8)
- end
- p filenames
复制代码 CopyFileA 是仅支持 ANSI 编码的函数,当然不支持中文,应该用 CopyFileW |
评分
-
查看全部评分
|