Project1
标题:
请教用FileTest.exists?判断文件问题
[打印本页]
作者:
赛露休斯
时间:
2012-8-12 16:28
标题:
请教用FileTest.exists?判断文件问题
用FileTest.exists?(“中文文件")判断文件,如果是中文文件名会失效,怎么解决?
作者:
R-零
时间:
2012-8-12 19:56
因为游戏内部的编码与操作系统不同,但是英文等相同。汉字由内部直接输出会变成乱码。
用下面脚本对字符进行转换,具体自己尝试
这段脚本必须贴在最前面
例如 a = "水君"
b = a.u2w
这样“水君”这串字的编码就可以转换了
#------------------------------------------------------------------------------
# String 类追加定义。
#==============================================================================
class String
#----------------------------------------------------------------------------
# ● API
#----------------------------------------------------------------------------
@@MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
@@WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
#----------------------------------------------------------------------------
# ● UTF-8 转 Unicode
#----------------------------------------------------------------------------
def u2w
i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
buffer = "\0" * (i*2)
@@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
buffer.chop!
return buffer
end
#----------------------------------------------------------------------------
# ● UTF-8 转系统编码
#----------------------------------------------------------------------------
def u2s
i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
buffer = "\0" * (i*2)
@@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
@@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
#----------------------------------------------------------------------------
# ● 系统编码转 UTF-8
#----------------------------------------------------------------------------
def s2u
i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
buffer = "\0" * (i*2)
@@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
@@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
result.chop!
return result
end
end
复制代码
作者:
赛露休斯
时间:
2012-8-13 00:21
可以了,认可楼上
咦...怎么找不到认可答案按钮?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1