C++ Logo

sg16

Advanced search

[SG16] Alternative approach for LWG3565 "Handling of encodings in localized chrono formatting"

From: Peter Brett <pbrett_at_[hidden]>
Date: Thu, 17 Jun 2021 22:57:02 +0200
Hi all,

The current proposed resolution for LWG3565 (https://wg21.link/LWG3565)
involves transcoding from the locale encoding to UTF-8. This makes me a
little uncomfortable.

Is it possible instead to say that, if the string literal encoding is
UTF-8, then the effective locale is _as if_ the specified or global
locale was modified by replacing the associated codeset with UTF-8?

So, the following code:

    std::locale l1("Russian.1251");
    auto s = std::format(l1, "День недели: {:L}", std::chrono::Monday);

Would behave as if replaced by:

    std::locale l1("Russian.1251");
    std::locale l2(l1, std::locale("Russian.UTF-8"), locale::time);
    auto s = std::format(l2, "День недели: {:L}", std::chrono::Monday);

This would permit an implementation that has UTF-8 locale data available
to use it directly, rather than being required to use the 1251 codeset
locale data and transcode in order to conform to the standard.

                             Peter

P.S. How would one go about writing a locale object that customizes
chrono formatting with std::format? Does anyone have a code sample?

Received on 2021-06-17 15:57:15