2015-02-25 2 views
3

Учитывая std::string, содержащий текст, закодированный в произвольном, но известном наборе символов. Каков самый простой способ на C++ считать символы? Он должен иметь возможность обрабатывать такие вещи, как объединение символов и кодов Unicode.Как подсчитать символы в строке, закодированной в произвольном наборе символов

Было бы неплохо иметь что-то вроде:

std::string test = "éäöü"; 
std::cout << test.size("utf-8") << std::endl; 

К сожалению, жизнь не всегда легко с C++. :)

Для Unicode, я видел, что можно использовать библиотеку ICU: Cross-platform iteration of Unicode string (counting Graphemes using ICU)

Но есть более общее решение?

+0

станд :: wstring приходит на ум – hanshenrik

+0

зЬй :: wstring тест = TEXT ("éäöü"); std :: cout << test.length(); – hanshenrik

+0

@hanshenrik: Интересно. Раньше не работал с 'wchar_t'. Что произойдет, если вы прочитаете строку из некоторого входного потока (например, файла или stdin)? – bitmask

ответ

0

Я боюсь, что это зависит от конкретной кодировки. Если вы используете UTF-8 (и я действительно не понимаю, почему вы не должны), вы можете использовать UTF8-CPP.

Казалось бы, они имеют функцию, чтобы сделать только это:

::std::string test = "éäöü"; 
auto length = ::utf8::distance(test.begin(), test.end()); 
::std::cout << length << "\n"; // should print 4. 
+0

FYI: В настоящее время я реализую структуру веб-сервиса, которая имеет функцию проверки длины отправленного текста. Таким образом, кодировка зависит от того, что пользователь хочет использовать. Большинство из них будут использовать UTF-8, но он также должен работать с другими. – Pascal

Смежные вопросы