查看: 1577|回复: 2

[已经解决] 请教用FileTest.exists?判断文件问题

[复制链接]
梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
发表于 2012-8-12 16:28:28 | 显示全部楼层 |阅读模式

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

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

×
用FileTest.exists?(“中文文件")判断文件,如果是中文文件名会失效,怎么解决?
最近在研究XAS
梦石
0
星屑
1002
在线时间
1270 小时
注册时间
2011-2-14
回帖
5388
发表于 2012-8-12 19:56:02 | 显示全部楼层
因为游戏内部的编码与操作系统不同,但是英文等相同。汉字由内部直接输出会变成乱码。

用下面脚本对字符进行转换,具体自己尝试
这段脚本必须贴在最前面

例如 a = "水君"
       b = a.u2w
      这样“水君”这串字的编码就可以转换了
  1. #------------------------------------------------------------------------------
  2. #  String 类追加定义。
  3. #==============================================================================

  4. class String
  5.   #----------------------------------------------------------------------------
  6.   # ● API
  7.   #----------------------------------------------------------------------------
  8.   @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  9.   @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  10.   #----------------------------------------------------------------------------
  11.   # ● UTF-8 转 Unicode
  12.   #----------------------------------------------------------------------------
  13.   def u2w
  14.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  15.     buffer = "\0" * (i*2)
  16.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  17.     buffer.chop!
  18.     return buffer
  19.   end  
  20.   #----------------------------------------------------------------------------
  21.   # ● UTF-8 转系统编码
  22.   #----------------------------------------------------------------------------
  23.   def u2s
  24.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  25.     buffer = "\0" * (i*2)
  26.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  27.     i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
  28.     result = "\0" * i
  29.     @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
  30.     result.chop!
  31.     return result
  32.   end
  33.   #----------------------------------------------------------------------------
  34.   # ● 系统编码转 UTF-8
  35.   #----------------------------------------------------------------------------
  36.   def s2u
  37.     i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
  38.     buffer = "\0" * (i*2)
  39.     @@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
  40.     i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  41.     result = "\0" * i
  42.     @@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  43.     result.chop!
  44.     return result
  45.   end
  46. end
复制代码

点评

不只中文名會失效,且無法判定已加密的內容,這得另外再設定才能解決  发表于 2012-8-13 01:02

评分

参与人数 2星屑 +206 梦石 +2 收起 理由
hcm + 200 + 2 认可答案
赛露休斯 + 6 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
 楼主| 发表于 2012-8-13 00:21:43 | 显示全部楼层
可以了,认可楼上
咦...怎么找不到认可答案按钮?
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部