В C ++ 11 мне все еще нужна нестандартная библиотека обработки строк для текста Unicode?

Я заметил, что метод длины std :: string возвращает длину в байтах, а тот же метод в std :: u16string возвращает количество 2-байтовых последовательности.

Я также заметил, что когда символ или кодовая точка находится за пределами BMP, length возвращает 4, а не 2.

Кроме того, escape-последовательность Unicode ограничена \ unnnn, поэтому любая кодовая точка выше U + FFFF не может быть вставлен с помощью escape-последовательности.

Другими словами, похоже, нет поддержки суррогатных пар или кодовых точек за пределами BMP.

Принимая это во внимание, является ли общепринятой или рекомендуемой практикой использовать нестандартную библиотеку обработки строк, которая понимает UTF-8, UTF-16, суррогатные пары и т. Д.?

Есть ли у моего компилятора ошибка или я неправильно используете стандартные методы обработки строк?

Пример:

/*
* Example with the Unicode code points U+0041, U+4061, U+10196 and U+10197
*/

#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
    std::string example1 = u8"A䁡         
11
задан Naveen 28 February 2012 в 05:00
поделиться