Я исследую строковые кодировки и локали. О, радость!
По сути, я хочу проверить, что каждый символ в строке UTF-8 является графическим, как isgraph
, но для всех символов Unicode.
Вот что я установил до сих пор, но я не знаю, как это собрать.
Я считаю, что преобразование UTF-8 в UTF-32 будет самым общим решением, и оно будет выглядеть так:
template<class Facet>
struct deletable_facet : Facet
{
template<class ...Args>
deletable_facet (Args&& ...args) : Facet (std::forward<Args> (args)...) {}
};
std::wstring_convert<deletable_facet<std::codecvt<char32_t, char, std::mbstate_t>>, char32_t> conv32;
std::u32string str32 = conv32.from_bytes (data)
Но пример для isgraph
не наполняет меня уверенностью:
std::locale loc2 ("en_US.UTF-8");
std::isgraph (c, loc2)
В документации сказано, что строковый аргумент "зависит от ОС". Также пример показывает, что мне нужно указать язык , а также кодировку.
Мои строки могут быть английскими, французскими, японскими, как угодно.
Как определить, что символ в строке UTF-8 является графическим на любом языке?