PrivateDeclareFunctionMultiByt娣定撰钠eToWideCharLib"稆糨孝汶;kernel32"(ByValCodePageAsLong,ByValdwFlagsAsLong,ByVallpMultiByteStrAsLong,ByValcchMultiByteAsLong,ByVallpWideCharStrAsLong,ByValcchWideCharAsLong)AsLongPrivateDeclareFunctionWideCharToMultiByteLib"kernel32"(ByValCodePageAsLong,ByValdwFlagsAsLong,ByVallpWideCharStrAsLong,ByValcchWideCharAsLong,ByVallpMultiByteStrAsLong,ByValcchMultiByteAsLong,ByVallpDefaultCharAsLong,ByVallpUsedDefaultCharAsLong)AsLongPrivateConstCP_ACP=0'defaulttoANSIcodepagePrivateConstCP_UTF8=65001'defaulttoUTF-8codepage
方法/步骤
1、'字符转UTF8PublicFunctionEncodeToBytes(ByValsDataAsString)AsByte()'Note:Len(sData)>0DimaRetn()AsByteDimnSizeAsLongnSize=WideCharToMultiByte(CP_UTF8,0,StrPtr(sData),-1,0,0,0,0)-1IfnSize=0ThenExitFunctionReDimaRetn(0TonSize-1)AsByteWideCharToMultiByteCP_UTF8,0,StrPtr(sData),-1,VarPtr(aRetn(0)),nSize,0,0EncodeToBytes=aRetnEraseaRetnEndFunction
2、'UTF8转字符PublicFunctionDecodeToBytes(ByValsDataAsString)AsByte()'Note:Len(sData)>0DimaRetn()AsByteDimnSizeAsLongnSize=MultiByteToWideChar(CP_UTF8,0,StrPtr(sData),-1,0,0)-1IfnSize=0ThenExitFunctionReDimaRetn(0To2*nSize-1)AsByteMultiByteToWideCharCP_UTF8,0,StrPtr(sData),-1,VarPtr(aRetn(0)),nSizeDecodeToBytes=aRetnEraseaRetnEndFunction
3、PrivateSubCommand1_Click()DimsAsStrings=StrConv(EncodeToBytes("中文"),vbUnicode)'将utf编码的数组转VB可处理字符MsgBoxst=DecodeToBytes(StrConv(s,vbFromUnicode))MsgBoxtEndSub