1// Common/StringConvert.cpp 2 3#include "StdAfx.h" 4 5#include "StringConvert.h" 6 7#ifndef _WIN32 8#include <stdlib.h> 9#endif 10 11#ifdef _WIN32 12UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) 13{ 14 UString resultString; 15 if(!srcString.IsEmpty()) 16 { 17 int numChars = MultiByteToWideChar(codePage, 0, srcString, 18 srcString.Length(), resultString.GetBuffer(srcString.Length()), 19 srcString.Length() + 1); 20 #ifndef _WIN32_WCE 21 if(numChars == 0) 22 throw 282228; 23 #endif 24 resultString.ReleaseBuffer(numChars); 25 } 26 return resultString; 27} 28 29AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) 30{ 31 AString resultString; 32 if(!srcString.IsEmpty()) 33 { 34 int numRequiredBytes = srcString.Length() * 2; 35 char defaultChar = '_'; 36 int numChars = WideCharToMultiByte(codePage, 0, srcString, 37 srcString.Length(), resultString.GetBuffer(numRequiredBytes), 38 numRequiredBytes + 1, &defaultChar, NULL); 39 #ifndef _WIN32_WCE 40 if(numChars == 0) 41 throw 282229; 42 #endif 43 resultString.ReleaseBuffer(numChars); 44 } 45 return resultString; 46} 47 48#ifndef _WIN32_WCE 49AString SystemStringToOemString(const CSysString &srcString) 50{ 51 AString result; 52 CharToOem(srcString, result.GetBuffer(srcString.Length() * 2)); 53 result.ReleaseBuffer(); 54 return result; 55} 56#endif 57 58#else 59 60UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) 61{ 62 UString resultString; 63 for (int i = 0; i < srcString.Length(); i++) 64 resultString += wchar_t(srcString[i]); 65 /* 66 if(!srcString.IsEmpty()) 67 { 68 int numChars = mbstowcs(resultString.GetBuffer(srcString.Length()), srcString, srcString.Length() + 1); 69 if (numChars < 0) throw "Your environment does not support UNICODE"; 70 resultString.ReleaseBuffer(numChars); 71 } 72 */ 73 return resultString; 74} 75 76AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) 77{ 78 AString resultString; 79 for (int i = 0; i < srcString.Length(); i++) 80 resultString += char(srcString[i]); 81 /* 82 if(!srcString.IsEmpty()) 83 { 84 int numRequiredBytes = srcString.Length() * 6 + 1; 85 int numChars = wcstombs(resultString.GetBuffer(numRequiredBytes), srcString, numRequiredBytes); 86 if (numChars < 0) throw "Your environment does not support UNICODE"; 87 resultString.ReleaseBuffer(numChars); 88 } 89 */ 90 return resultString; 91} 92 93#endif 94 95