PlatformDef.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. 
  2. #include "PlatformDef.h"
  3. #ifdef WIN32
  4. std::string Unicode_to_Local(const wchar_t* in, int len)
  5. {
  6. std::string out;
  7. UINT CP_GBK = GetOEMCP();
  8. int bufferlen = (int)::WideCharToMultiByte(CP_GBK, 0, in, len, NULL, 0, NULL, NULL);
  9. char* pBuffer = new char[bufferlen + 4];
  10. if (NULL == pBuffer)
  11. {
  12. return "";
  13. }
  14. int out_len = ::WideCharToMultiByte(CP_GBK, 0, in, len, pBuffer, bufferlen + 2, NULL, NULL);
  15. pBuffer[bufferlen] = '\0';
  16. out.assign(pBuffer, out_len);
  17. delete[] pBuffer;
  18. return out;
  19. }
  20. std::string Unicode_to_UTF8(const wchar_t* in, int len)
  21. {
  22. std::string out;
  23. size_t out_len = len * 3 + 1;
  24. char* pBuf = new char[out_len];
  25. if (NULL == pBuf)
  26. {
  27. return "";
  28. }
  29. char* pResult = pBuf;
  30. memset(pBuf, 0, out_len);
  31. out_len = ::WideCharToMultiByte(CP_UTF8, 0, in, len, pBuf, len * 3, NULL, NULL);
  32. out.assign(pResult, out_len);
  33. delete[] pResult;
  34. pResult = NULL;
  35. return out;
  36. }
  37. XString UTF8_to_Unicode(const char* in, int len)
  38. {
  39. wchar_t* pBuf = new wchar_t[len + 1];
  40. if (NULL == pBuf)
  41. {
  42. return __XT("");
  43. }
  44. size_t out_len = (len + 1) * sizeof(wchar_t);
  45. memset(pBuf, 0, (len + 1) * sizeof(wchar_t));
  46. wchar_t* pResult = pBuf;
  47. out_len = ::MultiByteToWideChar(CP_UTF8, 0, in, len, pBuf, len * sizeof(wchar_t));
  48. XString out;
  49. out.assign(pResult, out_len);
  50. delete[] pResult;
  51. pResult = NULL;
  52. return out;
  53. }
  54. XString Local_to_Unicode(const char* in, int len)
  55. {
  56. UINT CP_GBK = GetOEMCP();
  57. XString out;
  58. int wbufferlen = (int)::MultiByteToWideChar(CP_GBK, MB_PRECOMPOSED, in, len, NULL, 0);
  59. wchar_t* pwbuffer = new wchar_t[wbufferlen + 4];
  60. if (NULL == pwbuffer)
  61. {
  62. return out;
  63. }
  64. wbufferlen = (int)::MultiByteToWideChar(CP_GBK, MB_PRECOMPOSED, in, len, pwbuffer, wbufferlen + 2);
  65. pwbuffer[wbufferlen] = '\0';
  66. out.assign(pwbuffer, wbufferlen);
  67. delete[] pwbuffer;
  68. return out;
  69. }
  70. #endif // WIN32