Home | History | Annotate | Download | only in Common
      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