12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
-
- #include "PlatformDef.h"
- #ifdef WIN32
- std::string Unicode_to_Local(const wchar_t* in, int len)
- {
- std::string out;
- UINT CP_GBK = GetOEMCP();
- int bufferlen = (int)::WideCharToMultiByte(CP_GBK, 0, in, len, NULL, 0, NULL, NULL);
- char* pBuffer = new char[bufferlen + 4];
- if (NULL == pBuffer)
- {
- return "";
- }
- int out_len = ::WideCharToMultiByte(CP_GBK, 0, in, len, pBuffer, bufferlen + 2, NULL, NULL);
- pBuffer[bufferlen] = '\0';
- out.assign(pBuffer, out_len);
- delete[] pBuffer;
- return out;
- }
- std::string Unicode_to_UTF8(const wchar_t* in, int len)
- {
- std::string out;
- size_t out_len = len * 3 + 1;
- char* pBuf = new char[out_len];
- if (NULL == pBuf)
- {
- return "";
- }
- char* pResult = pBuf;
- memset(pBuf, 0, out_len);
- out_len = ::WideCharToMultiByte(CP_UTF8, 0, in, len, pBuf, len * 3, NULL, NULL);
- out.assign(pResult, out_len);
- delete[] pResult;
- pResult = NULL;
- return out;
- }
- XString UTF8_to_Unicode(const char* in, int len)
- {
- wchar_t* pBuf = new wchar_t[len + 1];
- if (NULL == pBuf)
- {
- return __XT("");
- }
- size_t out_len = (len + 1) * sizeof(wchar_t);
- memset(pBuf, 0, (len + 1) * sizeof(wchar_t));
- wchar_t* pResult = pBuf;
- out_len = ::MultiByteToWideChar(CP_UTF8, 0, in, len, pBuf, len * sizeof(wchar_t));
- XString out;
- out.assign(pResult, out_len);
- delete[] pResult;
- pResult = NULL;
- return out;
- }
- XString Local_to_Unicode(const char* in, int len)
- {
- UINT CP_GBK = GetOEMCP();
- XString out;
- int wbufferlen = (int)::MultiByteToWideChar(CP_GBK, MB_PRECOMPOSED, in, len, NULL, 0);
- wchar_t* pwbuffer = new wchar_t[wbufferlen + 4];
- if (NULL == pwbuffer)
- {
- return out;
- }
- wbufferlen = (int)::MultiByteToWideChar(CP_GBK, MB_PRECOMPOSED, in, len, pwbuffer, wbufferlen + 2);
- pwbuffer[wbufferlen] = '\0';
- out.assign(pwbuffer, wbufferlen);
- delete[] pwbuffer;
- return out;
- }
- #endif // WIN32
|