I think you are asking for "clarity" of the code, and not using ASCII, UTF-8, 16 or 32 bit characters.
If so, I prefer to make the code blocks as large as possible: so that it can use the "gate" (symbolic constant _UNICODE) to select either individual files, or at least large pieces of code. A code that changes its spots in any other line, or, or, God forbid, in a statement, is difficult to understand.
I would advise against using gates to select individual file inclusions
#ifdef _UNICODE #include "myUniLib.h" #else #include "myASCIILib.h" #endif
as such entails two, or maybe three files (a Unicode file, a 646US (ASCII) file, and possibly your nexus file with the above code). This is three times the likelihood that something is lost, as well as the failure of the assembly.
Instead, use the gate in the file to select large blocks of code:
#ifdef _UNICODE ...lotsa code... #else ...lotsa code... #endif
OK, say you do the opposite: wondering about char versus char (UTF-8) versus W versus A. How versatile do you want to be? The CStrings you mention refers only to the Windows world. If you want to be compatible with Mac and UNIX (OK, Linux), you are on a rough trip.
BtW- ASCII ... not ... a recognized standard, anymore. There ASCII, and then there ... ASCII. If you mean seven bits of โstandardโ from the old days of UNIX, the closest I found is ISO-646US. The unicode equivalent is ISO-10646.
Some people are lucky with character encoding in the form of URLs: just ASCII letters and numbers and a percent sign. Although you have to encode and decode all the time, the storage is really predictable. A bit strange, yes, but definitely innovative.
There are some language traps. For example, regardless of whether the case is bidirectional (I donโt know the right word, here). In Deutsch, lowercase ร becomes SS when converted to uppercase. SS, however, when the lower shell, morphs to ss, not ร. Turkish has something like that. When developing your application, do not let case translations help you.
Also, remember that grammatical ordering is different in different languages. Just: "Hi Jim! How is your Monday going?" might end up saying "Hello yours, monday, is everything going well, Jim?"
Finally, a warning: avoid the IO stream (std :: cin <and std :: cout โ). This forces you to implement your message generators in such a way that their localization becomes very complex.
You are asking the right questions. You have ahead ahead! Best!