Enabling C++ Applications for Unicode
Go Up to Unicode for C++ Index
Because the default string is Unicode, any C++ code that uses RAD Studio frameworks and libraries must be Unicode-aware. You can ensure that your code correctly handles both narrow and wide strings by using the _TCHAR Mapping option on the Project > Options > C++ (Shared Options) dialog box.
- Note: New C++ applications automatically set the _TCHAR mapping option to
wchar_t
and contain a_tmain(...)
entry point, which floats tomain
. C++ applications that have _TCHAR mapping set automatically use the correct floating functions.
Contents
Unicode-Related Issues for C++
C++ has a unique set of Unicode-related issues that Delphi users do not encounter. These issues are due to the fact that the C++ RTL and the Windows API are narrow by default while RAD Studio frameworks and libraries use Unicode strings. Some of these issues are discussed here.
Using RAD Studio Frameworks and Libraries and the C++ RTL
RAD Studio frameworks and libraries use Unicode, while the C++ RTL is narrow by default but contains routines for both wide and narrow strings (see Floating Functions). Thus, you need to use the wide versions of C++ RTL functions in an application that use RAD Studio frameworks and libraries. To use the C++ RTL in an application that requires wide strings, you need to do the following:
- Set _TCHAR Mapping to
wchar_t
and use _TCHAR in your code. - Use the "floating" version of the C++ RTL members, such as
_tcscpy
instead ofstrcpy
. See the list of Floating Functions.
Using Windows API
The Windows API is typically narrow by default. The _TCHAR mapping option helps tremendously here, but the option is OFF (set to char
) by default for C++ applications that do not use RAD Studio frameworks and libraries.
To use the Windows API in a C++ application that does not use RAD Studio frameworks and libraries, you must explicitly set the _TCHAR maps to option to wchar_t
on the Project > Options > C++ (Shared Options) dialog box.
Passing String Constants
String constants, such as "string constant", are still narrow (char*
), so you cannot pass them to functions of RAD Studio frameworks and libraries that take PChar as you did before. You can pass the constant to functions of RAD Studio frameworks and libraries with a PChar parameter if you prefix the constant with L, as in:
L"string constant"
This conversion is automatically done for you when you set _TCHAR mapping to wchar_t
and use the _TEXT or _T macros, as described in _TCHAR Mapping.
Setting the CodePage
You can set the codepage for AnsiString types with AnsiStringT<codepage>.
The same predefined types are available that Delphi provides:
- AnsiString is
AnsiStringT<0>
. - UTF8String is
AnsiStringT<65005>
, the UTF8 code page. - RawByteString is
AnsiStringT<0xFFFF>
.
Note: The UTF8 encoding can be specified by using the UTF8 codepage and encoding the strings between the API-RTL and the calls to RAD Studio frameworks and libraries. See UTF-8 Conversion Routines.