Как определить std :: isgraph на любом языке для строки UTF-8? - PullRequest
0 голосов
/ 18 января 2019

Я исследую строковые кодировки и локали. О, радость!

По сути, я хочу проверить, что каждый символ в строке 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 является графическим на любом языке?

...