设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3940|回复: 10
打印 上一主题 下一主题

[已经解决] RM怎么访问中文目录

 关闭 [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

跳转到指定楼层
1
发表于 2009-7-9 14:16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
是目录不是文件

File.open("中文名测试\\新建文本文档.txt") #=>正常
Dir.open("中文名测试") #=>报错:找不到文件

于是……怎么遍历中文目录呢

还有:CopyFileA也不支持中文吗
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2008-5-11
帖子
318
2
发表于 2009-7-9 14:21:39 | 只看该作者
需要改脚本中所有涉及目录的地方,比较麻烦
建议不要改
《诛仙小凡传》制作ing
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

3
 楼主| 发表于 2009-7-9 14:26:40 | 只看该作者
我是说我自己写脚本访问中文目录啦
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

4
 楼主| 发表于 2009-7-9 17:40:47 | 只看该作者
三小时了……我顶……
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
5
发表于 2009-7-9 18:01:56 | 只看该作者
为什么非要遍历中文目录……

如果ruby实在不行,就用C/C++写好了做成dll,再用API调用吧
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

6
 楼主| 发表于 2009-7-9 18:53:07 | 只看该作者
{:3_46:}不会吧……Ruby真的不支持吗……

然后,CopyFileA支持吗
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
7
发表于 2009-7-9 19:47:05 | 只看该作者
据某人说RUBY的一些内部类不支持UTF8= =
RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

8
 楼主| 发表于 2009-7-9 19:51:44 | 只看该作者
><好大的臭虫……

那么,通过转码的方式能行吗,需要转成什么码
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
9
发表于 2009-7-10 02:01:45 | 只看该作者
本帖最后由 紫苏 于 2009-8-25 23:13 编辑
  1. #==============================================================================
  2. # ■ String
  3. #------------------------------------------------------------------------------
  4. #  字符串类。可处理任意长度的字节串。(追加编码转换的定义)
  5. #==============================================================================

  6. class String
  7.   #--------------------------------------------------------------------------
  8.   # ● 用来编码 Ruby 字符串、解码 unicode 的 两个 Windows API 函数
  9.   #--------------------------------------------------------------------------
  10.   @@MultiByteToWideChar = Win32API.new("kernel32", "MultiByteToWideChar", ['I', 'L', 'P', 'I', 'P', 'I'], 'I')
  11.   @@WideCharToMultiByte = Win32API.new("kernel32", "WideCharToMultiByte", ['I', 'L', 'P', 'I', 'P', 'I', 'P', 'P'], 'I')
  12.   #--------------------------------------------------------------------------
  13.   # ● 返回将 Ruby UTF-8 字符串对象(本身)编码为 unicode 后的字符串
  14.   #--------------------------------------------------------------------------
  15.   def to_unicode
  16.     len = @@MultiByteToWideChar.call(65001, 0, self, -1, 0, 0) << 1
  17.     buf =" " * len
  18.     # 65001: UTF-8 字符集编码(代码页)
  19.     @@MultiByteToWideChar.call(65001, 0, self, -1, buf, len)
  20.     return buf
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 返回将编码为 unicode 的字符串对象(本身)解码为 UTF-8 后的字符串
  24.   #--------------------------------------------------------------------------
  25.   def to_UTF8
  26.     len = @@WideCharToMultiByte.call(65001, 0, self, -1, 0, 0, 0, 0)
  27.     buf =" " * len
  28.     @@WideCharToMultiByte.call(65001, 0, self, -1, buf, len, 0, 0)
  29.     # 去掉 '\0' 字符串结束符(因为转换之后仅仅用于 Ruby 字符串)
  30.     buf.slice!(-1, 1)
  31.     return buf
  32.   end
  33. end

  34. FindFirstFile = Win32API.new("kernel32", "FindFirstFileW", "PP", "L")
  35. FindNextFile = Win32API.new("kernel32", "FindNextFileW", "LP", "I")

  36. filenames = []
  37. findFileData = " " * 592

  38. hFindFile = FindFirstFile.call(
  39. "\\\\?\\C:\\TDDOWNLOAD\\孢子完整简体中文版@圣城家园@圣风\\孢子完整简体中文版\\孢子\\*".to_unicode, findFileData)

  40. while FindNextFile.call(hFindFile, findFileData) != 0
  41.   filenames.push(findFileData[44, 45 + 260 * 2].to_UTF8)
  42. end

  43. p filenames
复制代码
CopyFileA 是仅支持 ANSI 编码的函数,当然不支持中文,应该用 CopyFileW

评分

参与人数 1星屑 +14 收起 理由
viktor + 14 学习了!果然RGSS的问题还是得到6r上来找.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
10
发表于 2009-7-10 02:44:59 | 只看该作者
本帖最后由 猫哥哥 于 2009-7-10 02:46 编辑

现在大家用的windows都是支持宽字符集的。所以直接用CopyFile就行了。

Windows API函数后面带个A的,意思就是仅支持ANSI编码。如果想知道更多,请查阅《windows核心编程》第二章。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 19:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表