1// Common/StringConvert.h 2 3#ifndef ZIP7_INC_COMMON_STRING_CONVERT_H 4#define ZIP7_INC_COMMON_STRING_CONVERT_H 5 6#include "MyString.h" 7#include "MyWindows.h" 8 9UString MultiByteToUnicodeString(const AString &src, UINT codePage = CP_ACP); 10UString MultiByteToUnicodeString(const char *src, UINT codePage = CP_ACP); 11 12// optimized versions that work faster for ASCII strings 13void MultiByteToUnicodeString2(UString &dest, const AString &src, UINT codePage = CP_ACP); 14// void UnicodeStringToMultiByte2(AString &dest, const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed); 15void UnicodeStringToMultiByte2(AString &dest, const UString &src, UINT codePage); 16 17AString UnicodeStringToMultiByte(const UString &src, UINT codePage, char defaultChar, bool &defaultCharWasUsed); 18AString UnicodeStringToMultiByte(const UString &src, UINT codePage = CP_ACP); 19 20inline const wchar_t* GetUnicodeString(const wchar_t *u) { return u; } 21inline const UString& GetUnicodeString(const UString &u) { return u; } 22 23inline UString GetUnicodeString(const AString &a) { return MultiByteToUnicodeString(a); } 24inline UString GetUnicodeString(const char *a) { return MultiByteToUnicodeString(a); } 25 26inline UString GetUnicodeString(const AString &a, UINT codePage) 27 { return MultiByteToUnicodeString(a, codePage); } 28inline UString GetUnicodeString(const char *a, UINT codePage) 29 { return MultiByteToUnicodeString(a, codePage); } 30 31inline const wchar_t* GetUnicodeString(const wchar_t *u, UINT) { return u; } 32inline const UString& GetUnicodeString(const UString &u, UINT) { return u; } 33 34inline const char* GetAnsiString(const char *a) { return a; } 35inline const AString& GetAnsiString(const AString &a) { return a; } 36 37inline AString GetAnsiString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); } 38inline AString GetAnsiString(const UString &u) { return UnicodeStringToMultiByte(u); } 39 40/* 41inline const char* GetOemString(const char* oem) 42 { return oem; } 43inline const AString& GetOemString(const AString &oem) 44 { return oem; } 45*/ 46const char* GetOemString(const char* oem); 47const AString& GetOemString(const AString &oem); 48inline AString GetOemString(const UString &u) 49 { return UnicodeStringToMultiByte(u, CP_OEMCP); } 50 51#ifdef _UNICODE 52 inline const wchar_t* GetSystemString(const wchar_t *u) { return u;} 53 inline const UString& GetSystemString(const UString &u) { return u;} 54 inline const wchar_t* GetSystemString(const wchar_t *u, UINT /* codePage */) { return u;} 55 inline const UString& GetSystemString(const UString &u, UINT /* codePage */) { return u;} 56 57 inline UString GetSystemString(const AString &a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); } 58 inline UString GetSystemString(const char *a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); } 59 inline UString GetSystemString(const AString &a) { return MultiByteToUnicodeString(a); } 60 inline UString GetSystemString(const char *a) { return MultiByteToUnicodeString(a); } 61#else 62 inline const char* GetSystemString(const char *a) { return a; } 63 inline const AString& GetSystemString(const AString &a) { return a; } 64 inline const char* GetSystemString(const char *a, UINT) { return a; } 65 inline const AString& GetSystemString(const AString &a, UINT) { return a; } 66 67 inline AString GetSystemString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); } 68 inline AString GetSystemString(const UString &u) { return UnicodeStringToMultiByte(u); } 69 inline AString GetSystemString(const UString &u, UINT codePage) { return UnicodeStringToMultiByte(u, codePage); } 70 71 72 73 /* 74 inline AString GetSystemString(const wchar_t *u) 75 { 76 UString s; 77 s = u; 78 return UnicodeStringToMultiByte(s); 79 } 80 */ 81 82#endif 83 84#ifndef UNDER_CE 85AString SystemStringToOemString(const CSysString &src); 86#endif 87 88 89#ifdef _WIN32 90/* we don't need locale functions in Windows 91 but we can define ENV_HAVE_LOCALE here for debug purposes */ 92// #define ENV_HAVE_LOCALE 93#else 94#define ENV_HAVE_LOCALE 95#endif 96 97#ifdef ENV_HAVE_LOCALE 98void MY_SetLocale(); 99const char *GetLocale(void); 100#endif 101 102#if !defined(_WIN32) || defined(ENV_HAVE_LOCALE) 103bool IsNativeUTF8(); 104#endif 105 106#ifndef _WIN32 107extern bool g_ForceToUTF8; 108#endif 109 110#endif 111