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 12 UString 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 if (numChars == 0) 21 throw 282228; 22 resultString.ReleaseBuffer(numChars); 23 } 24 return resultString; 25 } 26 27 AString UnicodeStringToMultiByte(const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed) 28 { 29 AString dest; 30 defaultCharWasUsed = false; 31 if (!s.IsEmpty()) 32 { 33 int numRequiredBytes = s.Length() * 2; 34 BOOL defUsed; 35 int numChars = WideCharToMultiByte(codePage, 0, s, s.Length(), 36 dest.GetBuffer(numRequiredBytes), numRequiredBytes + 1, 37 &defaultChar, &defUsed); 38 defaultCharWasUsed = (defUsed != FALSE); 39 if (numChars == 0) 40 throw 282229; 41 dest.ReleaseBuffer(numChars); 42 } 43 return dest; 44 } 45 46 AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) 47 { 48 bool defaultCharWasUsed; 49 return UnicodeStringToMultiByte(srcString, codePage, '_', defaultCharWasUsed); 50 } 51 52 #ifndef UNDER_CE 53 AString SystemStringToOemString(const CSysString &srcString) 54 { 55 AString result; 56 CharToOem(srcString, result.GetBuffer(srcString.Length() * 2)); 57 result.ReleaseBuffer(); 58 return result; 59 } 60 #endif 61 62 #else 63 64 UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) 65 { 66 UString resultString; 67 for (int i = 0; i < srcString.Length(); i++) 68 resultString += wchar_t(srcString[i]); 69 /* 70 if (!srcString.IsEmpty()) 71 { 72 int numChars = mbstowcs(resultString.GetBuffer(srcString.Length()), srcString, srcString.Length() + 1); 73 if (numChars < 0) throw "Your environment does not support UNICODE"; 74 resultString.ReleaseBuffer(numChars); 75 } 76 */ 77 return resultString; 78 } 79 80 AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) 81 { 82 AString resultString; 83 for (int i = 0; i < srcString.Length(); i++) 84 resultString += char(srcString[i]); 85 /* 86 if (!srcString.IsEmpty()) 87 { 88 int numRequiredBytes = srcString.Length() * 6 + 1; 89 int numChars = wcstombs(resultString.GetBuffer(numRequiredBytes), srcString, numRequiredBytes); 90 if (numChars < 0) throw "Your environment does not support UNICODE"; 91 resultString.ReleaseBuffer(numChars); 92 } 93 */ 94 return resultString; 95 } 96 97 #endif 98