![]() |
#4 |
Участник
|
когдато давно взято с этого форума, возможно поможет
X++: #define.CP_ACP(0) #define.CP_UTF8(65001) static str Utf2Ansi(str Utf8) { DLL _kernelDLL = new DLL("KERNEL32"); DLLFunction MultiByteToWideChar = new DLLFunction(_kernelDLL, "MultiByteToWideChar"); DLLFunction WideCharToMultiByte = new DLLFunction(_kernelDLL, "WideCharToMultiByte"); Binary buf, buf1; int len; str res; res = ""; if (Utf8) { buf = new Binary(strlen(Utf8)); buf.string(0, Utf8); buf1 = new Binary((strlen(Utf8) + 1) * 2); MultiByteToWideChar.returns(ExtTypes::DWord); MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord); if (MultiByteToWideChar.call(#CP_UTF8, 0, buf, strlen(Utf8) + 1, buf1, strlen(Utf8) + 1)) { WideCharToMultiByte.returns(ExtTypes::DWord); WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord); len = WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, 0, 0, 0); if (len) { buf = new Binary(len); if (WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, len, 0, 0)) { res = buf.string(0); } } } } return res; }
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy |
|
|
За это сообщение автора поблагодарили: Ivan Beshkurov (1). |
|
|