Project1

标题: 请教用FileTest.exists?判断文件问题 [打印本页]

作者: 赛露休斯    时间: 2012-8-12 16:28
标题: 请教用FileTest.exists?判断文件问题
用FileTest.exists?(“中文文件")判断文件,如果是中文文件名会失效,怎么解决?
作者: R-零    时间: 2012-8-12 19:56
因为游戏内部的编码与操作系统不同,但是英文等相同。汉字由内部直接输出会变成乱码。

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

例如 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 00:21
可以了,认可楼上
咦...怎么找不到认可答案按钮?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1