本帖最后由 SixRC 于 2017-11-21 16:46 编辑
试了一下 终于成功了
GetPrivateProfileStringA 或者 W
A的话 阿尔西斯需要转码成 ANSI ini 路径也是
就能成功获取gender 不过得到的是 ANSI 需要自己转回去
W的话 就都得用 Unicode UTF-8不行
不清楚内部的机制 查找 阿尔西斯 这串字符的时候 大概有什么出入
必须得全用 ANSI 或者 Unicode 吧
成功的代码
WideCharToMultiByte=Win32API.new('kernel32','WideCharToMultiByte','llplplll','l') MultiByteToWideChar=Win32API.new('kernel32','MultiByteToWideChar','llplpl','l') def utf8_to_uni(str) len=MultiByteToWideChar.call(0xFDE9,0,str,-1,0,0) str2="\0"*len MultiByteToWideChar.call(0xFDE9,0,str,-1,str2,len) str2 end Reader = Win32API.new("kernel32", "GetPrivateProfileStringW", "ppppip", "i") value = "\0" * 65534 aa="阿尔西斯" aa=utf8_to_uni("阿尔西斯") k= "gender" k=utf8_to_uni(k) ini=Dir.pwd+"/a.ini" ini=utf8_to_uni(ini) Reader.call(aa, k, "nil", value, 65534, ini) p value.strip!
WideCharToMultiByte=Win32API.new('kernel32','WideCharToMultiByte','llplplll','l')
MultiByteToWideChar=Win32API.new('kernel32','MultiByteToWideChar','llplpl','l')
def utf8_to_uni(str)
len=MultiByteToWideChar.call(0xFDE9,0,str,-1,0,0)
str2="\0"*len
MultiByteToWideChar.call(0xFDE9,0,str,-1,str2,len)
str2
end
Reader = Win32API.new("kernel32", "GetPrivateProfileStringW", "ppppip", "i")
value = "\0" * 65534
aa="阿尔西斯"
aa=utf8_to_uni("阿尔西斯")
k= "gender"
k=utf8_to_uni(k)
ini=Dir.pwd+"/a.ini"
ini=utf8_to_uni(ini)
Reader.call(aa, k, "nil", value, 65534, ini)
p value.strip!
记得把 ini 保存成 Unicode
哪个方便用哪个吧 |