Boost.Locale
|
All modern operating systems use Unicode.
As a result of radically different approaches, it is very hard to write portable Unicode aware applications.
Boost Locale fully supports both narrow and wide APIs. The default character encoding is assumed to be UTF-8 on Windows.
So if the default operating system Locale is "English_USA.1252" the default locale for Boost.Locale on Windows would be "en_US.UTF-8".
When the created locale object is installed globally, then any libraries that use std::codecvt
for conversion between narrow API and the native wide API would handle UTF-8 correctly.
A good example of such library is Boost.Filesystem v3.
For example
However such behavior may break existing software that assumes that the current encoding is single byte encodings like code page 1252.
The boost::locale::generator class has a property use_ansi_encoding() that allows changing the behavior to the legacy one and selecting an ANSI code page as the default system encoding.
So, when the current locale is "English_USA.1252" and the use_ansi_encoding
is turned on, then the default locale would be "en_US.windows-1252".
winapi
backend does not support ANSI encodings; thus UTF-8 encoding is always used for narrow characters.