![]() |
Boost.Locale
|
所有现代操作系统都使用 Unicode。
由于方法截然不同,因此编写可移植的 Unicode 应用非常困难。
Boost.Locale 完全支持窄 API 和宽 API。在 Windows 上,默认字符编码假定为 UTF-8。
因此,如果默认操作系统 Locale 是“English_USA.1252”,则 Windows 上 Boost.Locale 的默认 locale 将为“en_US.UTF-8”。
当创建的 locale 对象全局安装后,任何使用 std::codecvt
在窄 API 和原生宽 API 之间进行转换的库都将正确处理 UTF-8。
Boost.Filesystem v3 就是这样一个库的很好的例子。
例如
然而,这种行为可能会破坏假设当前编码是单字节编码(如代码页 1252)的现有软件。
boost::locale::generator 类具有属性 use_ansi_encoding(),该属性允许将行为更改为旧版行为,并选择 ANSI 代码页作为默认系统编码。
因此,当当前 locale 为“English_USA.1252”并且 use_ansi_encoding
开启时,默认 locale 将为“en_US.windows-1252”。
winapi
后端不支持 ANSI 编码;因此 UTF-8 编码始终用于窄字符。