// Common/StringConvert.cpp #include "StdAfx.h" #include #include "StringConvert.h" extern "C" { int global_use_utf16_conversion = 0; } namespace utf8 { #include "UTFConvert.cpp" } #ifdef LOCALE_IS_UTF8 UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) { if ((global_use_utf16_conversion) && (!srcString.IsEmpty())) { UString resultString; bool bret = utf8::ConvertUTF8ToUnicode(srcString,resultString); if (bret) return resultString; } UString resultString; for (int i = 0; i < srcString.Length(); i++) resultString += wchar_t(srcString[i] & 255); return resultString; } AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) { if ((global_use_utf16_conversion) && (!srcString.IsEmpty())) { AString resultString; bool bret = utf8::ConvertUnicodeToUTF8(srcString,resultString); if (bret) return resultString; } AString resultString; for (int i = 0; i < srcString.Length(); i++) { if (srcString[i] >= 256) resultString += '?'; else resultString += char(srcString[i]); } return resultString; } #else /* LOCALE_IS_UTF8 */ UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) { #ifdef HAVE_MBSTOWCS if ((global_use_utf16_conversion) && (!srcString.IsEmpty())) { UString resultString; int numChars = mbstowcs(resultString.GetBuffer(srcString.Length()),srcString,srcString.Length()+1); if (numChars >= 0) { resultString.ReleaseBuffer(numChars); return resultString; } } #endif UString resultString; for (int i = 0; i < srcString.Length(); i++) resultString += wchar_t(srcString[i] & 255); return resultString; } AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) { #ifdef HAVE_WCSTOMBS if ((global_use_utf16_conversion) && (!srcString.IsEmpty())) { AString resultString; int numRequiredBytes = srcString.Length() * 6+1; int numChars = wcstombs(resultString.GetBuffer(numRequiredBytes),srcString,numRequiredBytes); if (numChars >= 0) { resultString.ReleaseBuffer(numChars); return resultString; } } #endif AString resultString; for (int i = 0; i < srcString.Length(); i++) { if (srcString[i] >= 256) resultString += '?'; else resultString += char(srcString[i]); } return resultString; } #endif /* LOCALE_IS_UTF8 */