Utf-8 в C++: быстрые и злые шутки

См. инструмент linkchecker :

LinkChecker является свободным, GPL лицензировал блок проверки допустимости веб-сайта. LinkChecker проверяет ссылки в веб-документы или полные веб-сайты.

11
задан Matthieu M. 2 October 2009 в 12:24
поделиться

2 ответа

Что ж, эта пакость не сработает. Во-первых, каково значение маски после этого:

   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.

5
ответ дан 3 December 2019 в 11:21
поделиться

Сортировка UTF_8 как двоичного не будет сортироваться в порядке «Unicode». BOCU-1 будет. Как было сказано, ваше «ожидаемое» - довольно низкая планка для неанглоязычного контента.

1
ответ дан 3 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: