赞 | 3 |
VIP | 1 |
好人卡 | 40 |
积分 | 1 |
经验 | 93188 |
最后登录 | 2020-7-27 |
在线时间 | 1379 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 76
- 在线时间
- 1379 小时
- 注册时间
- 2012-7-5
- 帖子
- 1698
|
#============================================================================== # ■ String #------------------------------------------------------------------------------ # 为字符串追加编码转换的机能。 #============================================================================== # 参考: #[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072[/url](v=vs.85).aspx #[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130[/url](v=vs.85).aspx #[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756[/url](v=vs.85).aspx #============================================================================== class String #-------------------------------------------------------------------------- # ● 常量定义 #-------------------------------------------------------------------------- MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i') WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i') Codepages = { :System => 0, :UTF7 => 65000, :UTF8 => 65001, :S_JIS => 932, :GB2312 => 936, :BIG5 => 950, } #-------------------------------------------------------------------------- # ● 伪 iconv 编码转换 #-------------------------------------------------------------------------- # s : 原始编码,可使用 Codepages 中的符号或者直接使用代码页值。 # d : 目标编码,同上。 #-------------------------------------------------------------------------- def iconv s, d src = s.is_a?(Symbol)? Codepages[s] : s dest = d.is_a?(Symbol)? Codepages[d] : d len = MultiByteToWideChar.call src, 0, self, -1, nil, 0 buf = "\0" * (len * 2) MultiByteToWideChar.call src, 0, self, -1, buf, buf.size / 2 len = WideCharToMultiByte.call dest, 0, buf, -1, nil, 0, nil, nil ret = "\0" * len WideCharToMultiByte.call dest, 0, buf, -1, ret, ret.size, nil, nil self.respond_to?(:force_encoding) ? ret.force_encoding("ASCII-8BIT").delete("\000") : ret.delete("\000") end #-------------------------------------------------------------------------- # ● 快捷方式:从 ANSI 转为 UTF-8 编码 #-------------------------------------------------------------------------- def s2u self.respond_to?(:force_encoding) ? iconv(:System, :UTF8).force_encoding("utf-8") : iconv(:System, :UTF8) end #-------------------------------------------------------------------------- # ● 快捷方式:从 UTF-8 转为 ANSI 编码 #-------------------------------------------------------------------------- def u2s iconv(:UTF8, :System) end end
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# 为字符串追加编码转换的机能。
#==============================================================================
# 参考:
#[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072[/url](v=vs.85).aspx
#[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130[/url](v=vs.85).aspx
#[url]http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756[/url](v=vs.85).aspx
#==============================================================================
class String
#--------------------------------------------------------------------------
# ● 常量定义
#--------------------------------------------------------------------------
MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
Codepages = {
:System => 0, :UTF7 => 65000, :UTF8 => 65001,
:S_JIS => 932, :GB2312 => 936, :BIG5 => 950,
}
#--------------------------------------------------------------------------
# ● 伪 iconv 编码转换
#--------------------------------------------------------------------------
# s : 原始编码,可使用 Codepages 中的符号或者直接使用代码页值。
# d : 目标编码,同上。
#--------------------------------------------------------------------------
def iconv s, d
src = s.is_a?(Symbol)? Codepages[s] : s
dest = d.is_a?(Symbol)? Codepages[d] : d
len = MultiByteToWideChar.call src, 0, self, -1, nil, 0
buf = "\0" * (len * 2)
MultiByteToWideChar.call src, 0, self, -1, buf, buf.size / 2
len = WideCharToMultiByte.call dest, 0, buf, -1, nil, 0, nil, nil
ret = "\0" * len
WideCharToMultiByte.call dest, 0, buf, -1, ret, ret.size, nil, nil
self.respond_to?(:force_encoding) ?
ret.force_encoding("ASCII-8BIT").delete("\000") :
ret.delete("\000")
end
#--------------------------------------------------------------------------
# ● 快捷方式:从 ANSI 转为 UTF-8 编码
#--------------------------------------------------------------------------
def s2u
self.respond_to?(:force_encoding) ?
iconv(:System, :UTF8).force_encoding("utf-8") :
iconv(:System, :UTF8)
end
#--------------------------------------------------------------------------
# ● 快捷方式:从 UTF-8 转为 ANSI 编码
#--------------------------------------------------------------------------
def u2s
iconv(:UTF8, :System)
end
end
- class Game_Interpreter
- def title(str)
- t = File.read("Game.ini").s2u.sub(/^Title=.*/) { "Title="+str } .u2s
- File.open("Game.ini", "w") { |f| f.write t }
- exit
- end
- end
复制代码 以上 按照第一个脚本在上的顺序插入这两个脚本
然后在事件脚本中输入 title(新的游戏名) # 可以使用中文
此方法被触发后会自动退出游戏, 所以不想玩家觉得太突兀的话还是游戏中给出一些说明(设定) |
评分
-
查看全部评分
|