LINUX.ORG.RU

История изменений

Исправление peregrine, (текущая версия) :

Stl с юникодом дружит

Да ну? Если ты про utf32, то возможно и дружит. А что utf16, что utf8 - тихий ужас с C++ и стандартной библиотекой шаблонов. Или тебе одного ввода/вывода достаточно + хранения, а считать, сколько символов (не байт, а символов) и т.д. не требуется? Но да, можно, конечно, велосипеды клепать, типо такого:

unsigned int utf8StrLength (std::string str)
{
    unsigned int len = 0;
    for (int i = 0; i < str.length(); i++)
    {
        len += (str.at(i)++ & 0xc0) != 0x80;
    }
    return len;
}
Но код, в котором всюду стоят такие костыли мне противно читать, а если все эти костыли (которые толком некому тестировать) собрать в кучу и оформить в нормальную библиотеку, то получишь очередного тяжелого и тормознутого уродца, вроде Glib::ustring. Такова плата за внутреннюю сложность записи юникода. Так какой смысл в его создании?

Исправление peregrine, :

Stl с юникодом дружит

Да ну? Если ты про utf32, то возможно и дружит. А что utf16, что utf8 - тихий ужас с C++ и стандартной библиотекой шаблонов. Или тебе одного ввода/вывода достаточно + хранения, а считать, сколько символов (не байт, а символов) и т.д. не требуется? Но да, можно, конечно, велосипеды клепать, типо такого:

unsigned int utf8StrLength (std::string str)
{
    unsigned int len = 0;
    for (int i = 0; i < str.length(); i++)
    {
        len += (str.at(i)++ & 0xc0) != 0x80;
    }
    return len;
}
Но код, в котором всюду стоят такие костыли мне противно читать, а если все эти костыли (которые толком некому тестировать) собрать в кучу и оформить в нормальную библиотеку, то получишь очередного тяжелого и тормознутого уродца, вроде Glib::ustring. Такова плата за внутреннюю сложность записи юникода.

Исходная версия peregrine, :

Stl с юникодом дружит

Да ну? Если ты про utf32, то возможно и дружит. А что utf16, что utf8 - тихий ужас с C++ и стандартной библиотекой шаблонов. Или тебе одного ввода/вывода достаточно + хранения, а считать, сколько символов (не байт, а символов) и т.д. не требуется? Но да, можно конечно велосипеды клепать, типо такого:

unsigned int utf8StrLength (std::string str)
{
    unsigned int len = 0;
    for (int i = 0; i < str.length(); i++)
    {
        len += (str.at(i)++ & 0xc0) != 0x80;
    }
    return len;
}
Но код, в котором всюду стоят такие костыли мне противно читать, а если все эти костыли (которые толком некому тестировать) собрать в кучу и оформить в нормальную библиотеку, то получишь очередного тяжелого и тормознутого уродца, вроде Glib::ustring. Такова плата за внутреннюю сложность записи юникода.