本帖最后由 剑仙十号 于 2018-12-29 22:02 编辑
编码类。UTF-8与Unicode相互转换
\xe4\xba\xa7\xe5\x93\x81\xe5\x9b\xbe\xe7\x89\x87
minews :
\x... 这类编码 展开成对应的二进制 实际上是utf-8编码 TC用的是unicode(utf-16),转换一下即可
作者 :追逐
//UTF-8 转 Unicode
function A2W(szU8)
var wcsLen = MultiByteToWideChar(CP_UTF8,null,szU8,strlenA(szU8),null,0)
var wszString = new(wcsLen+1,"wchar")
memset(wszString,0,wcsLen+1)
MultiByteToWideChar(CP_UTF8, null, szU8, strlenA(szU8), wszString, wcsLen)
memset(wszString+wcsLen*2, 0, 1)
var str
str = getvoid(wszString,"wchar *")
delete(wszString)
return str
end
//Unicode 转 UTF-8
function W2A(unicode)
var len = WideCharToMultiByte(CP_UTF8,0,unicode,-1,null,0,null,null)
var szUtf8 = new(len+1,"char")
memset(szUtf8, 0, len + 1)
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, null, null)
memset(szUtf8+len, 0, 1)
var str
str = getvoid(szUtf8,"char *")
delete(szUtf8)
return str
end
function strlenA(str)
return dllcall("Kernel32.dll","long","lstrlenA","char *",str)
end
function strlenW(str)
return dllcall("Kernel32.dll","long","lstrlenW","wchar *",str)
end
function MultiByteToWideChar(CodePage,dwFlags,lpMultiByteStr,cchMultiByte,lpWideCharStr,cchWideChar)
//int MultiByteToWideChar(
//UINT CodePage,
//DWORD dwFlags,
//LPCSTR lpMultiByteStr,
//int cchMultiByte,
//LPWSTR lpWideCharStr,
//int cchWideChar
//);
return dllcall("kernel32.dll", "long", "MultiByteToWideChar", "long", CodePage, "long", dwFlags,"char *", lpMultiByteStr,"long", cchMultiByte,"long", lpWideCharStr,"long", cchWideChar)
end
function WideCharToMultiByte(CodePage,dwFlags,lpWideCharStr,cchWideChar,lpMultiByteStr,cchMultiByte,lpDefaultChar,pfUsedDefaultChar)
//int WideCharToMultiByte(
//UINT CodePage, //指定执行转换的代码页
//DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
//LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
//int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数
//LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
//int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
//LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
//LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
//);
return dllcall("kernel32.dll", "long", "WideCharToMultiByte", "long", CodePage, "long", dwFlags,"wchar *", lpWideCharStr,"long", cchWideChar,"long", lpMultiByteStr,"long", cchMultiByte,"long",lpDefaultChar,"long",pfUsedDefaultChar)
end
var CP_UTF8=65001
|