所以我尝试将
std::tolower
与自定义区域设置一起使用。
它适用于 wstring
,但使用 u32string
我收到:
what(): std::bad_cast
这就是我所做的
auto loc = std::locale("el_GR.UTF-8");
wstring wtest{L"πρόβλημα"};
u32string utest{U"πρόβλημα"};
auto toLower = [&](auto c) { return std::toupper(c, loc); };
std::transform(wtest.begin(), wtest.end(), wtest.begin(), toLower); //ok
std::transform(utest.begin(), utest.end(), utest.begin(), toLower); //bad_cast
区域设置仅需要支持
std::ctype
和 char
的 wchar_t
方面,即 std::string
和 std::wstring
。任何进一步的专业都是可选的。
您正在使用的实现似乎没有提供这样的专业化
char32_t
。