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