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

Project1

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

[已经解决] 又遇到个Win32API.new的问题,不能加载中文路径

[复制链接]

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
1
发表于 2014-6-30 20:13:32 | 显示全部楼层
纯摘录
不止是调用API,在其它方面用中文路径也会出问题,尽量不要使用吧

#==============================================================================
# ■ String
#------------------------------------------------------------------------------
#  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

点评

现在为了这个无聊的问题害我还要多写个程序 挂钩LoadLibaryA 然后替换文本补上目录  发表于 2014-6-30 20:43
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 06:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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