См. инструмент linkchecker :
LinkChecker является свободным, GPL лицензировал блок проверки допустимости веб-сайта. LinkChecker проверяет ссылки в веб-документы или полные веб-сайты.
Что ж, эта пакость не сработает. Во-первых, каково значение маски после этого:
const unsigned char mask = 0x11000000;
const unsigned char notUtf8Begin = 0x10000000;
Возможно, вы смешиваете шестнадцатеричное представление с двоичным.
Во-вторых, как вы правильно говорите в кодировке utf-8, длина символа может составлять несколько байтов. std :: count_if будет перебирать все байты в последовательности UTF8. But what you actually need is to look at leading byte for every character and skip the rest until the next character comes.
It will not be hard to implement a single cycle which does the calculation and jumping forward using the simple mask table for leading bytes.
At the end you get the same O(n) for checking the characters and it will work with every UTF8 string.
Сортировка UTF_8 как двоичного не будет сортироваться в порядке «Unicode». BOCU-1 будет. Как было сказано, ваше «ожидаемое» - довольно низкая планка для неанглоязычного контента.