diff options
author | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2021-12-27 00:00:00 +0000 |
---|---|---|
committer | Igor Pavlov <87184205+ip7z@users.noreply.github.com> | 2022-03-18 15:35:13 +0500 |
commit | f19f813537c7aea1c20749c914e756b54a9c3cf5 (patch) | |
tree | 816ba62ca7c0fa19f2eb46d9e9d6f7dd7c3a744d /CPP/Common/StringConvert.h | |
parent | 98e06a519b63b81986abe76d28887f6984a7732b (diff) | |
download | 7zip-21.07.tar.gz 7zip-21.07.tar.bz2 7zip-21.07.zip |
'21.07'21.07
Diffstat (limited to '')
-rw-r--r-- | CPP/Common/StringConvert.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/CPP/Common/StringConvert.h b/CPP/Common/StringConvert.h new file mode 100644 index 0000000..865c025 --- /dev/null +++ b/CPP/Common/StringConvert.h | |||
@@ -0,0 +1,110 @@ | |||
1 | // Common/StringConvert.h | ||
2 | |||
3 | #ifndef __COMMON_STRING_CONVERT_H | ||
4 | #define __COMMON_STRING_CONVERT_H | ||
5 | |||
6 | #include "MyString.h" | ||
7 | #include "MyWindows.h" | ||
8 | |||
9 | UString MultiByteToUnicodeString(const AString &src, UINT codePage = CP_ACP); | ||
10 | UString MultiByteToUnicodeString(const char *src, UINT codePage = CP_ACP); | ||
11 | |||
12 | // optimized versions that work faster for ASCII strings | ||
13 | void MultiByteToUnicodeString2(UString &dest, const AString &src, UINT codePage = CP_ACP); | ||
14 | // void UnicodeStringToMultiByte2(AString &dest, const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed); | ||
15 | void UnicodeStringToMultiByte2(AString &dest, const UString &src, UINT codePage); | ||
16 | |||
17 | AString UnicodeStringToMultiByte(const UString &src, UINT codePage, char defaultChar, bool &defaultCharWasUsed); | ||
18 | AString UnicodeStringToMultiByte(const UString &src, UINT codePage = CP_ACP); | ||
19 | |||
20 | inline const wchar_t* GetUnicodeString(const wchar_t *u) { return u; } | ||
21 | inline const UString& GetUnicodeString(const UString &u) { return u; } | ||
22 | |||
23 | inline UString GetUnicodeString(const AString &a) { return MultiByteToUnicodeString(a); } | ||
24 | inline UString GetUnicodeString(const char *a) { return MultiByteToUnicodeString(a); } | ||
25 | |||
26 | inline UString GetUnicodeString(const AString &a, UINT codePage) | ||
27 | { return MultiByteToUnicodeString(a, codePage); } | ||
28 | inline UString GetUnicodeString(const char *a, UINT codePage) | ||
29 | { return MultiByteToUnicodeString(a, codePage); } | ||
30 | |||
31 | inline const wchar_t* GetUnicodeString(const wchar_t *u, UINT) { return u; } | ||
32 | inline const UString& GetUnicodeString(const UString &u, UINT) { return u; } | ||
33 | |||
34 | inline const char* GetAnsiString(const char *a) { return a; } | ||
35 | inline const AString& GetAnsiString(const AString &a) { return a; } | ||
36 | |||
37 | inline AString GetAnsiString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); } | ||
38 | inline AString GetAnsiString(const UString &u) { return UnicodeStringToMultiByte(u); } | ||
39 | |||
40 | /* | ||
41 | inline const char* GetOemString(const char* oem) | ||
42 | { return oem; } | ||
43 | inline const AString& GetOemString(const AString &oem) | ||
44 | { return oem; } | ||
45 | */ | ||
46 | const char* GetOemString(const char* oem); | ||
47 | const AString& GetOemString(const AString &oem); | ||
48 | inline 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 | ||
85 | AString 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 | ||
98 | void MY_SetLocale(); | ||
99 | const char *GetLocale(void); | ||
100 | #endif | ||
101 | |||
102 | #if !defined(_WIN32) || defined(ENV_HAVE_LOCALE) | ||
103 | bool IsNativeUTF8(); | ||
104 | #endif | ||
105 | |||
106 | #ifndef _WIN32 | ||
107 | extern bool g_ForceToUTF8; | ||
108 | #endif | ||
109 | |||
110 | #endif | ||