C ++ и UTF8 - Почему бы просто не заменить ASCII?

В моем приложении мне нужно постоянно преобразовывать строку между std :: string и std :: wstring из-за различных API (boost, win32, ffmpeg и т. Д.). Особенно с ffmpeg строки заканчиваются utf8-> utf16-> utf8-> utf16, просто чтобы открыть файл.

Поскольку UTF8 обратно совместим с ASCII, я думал, что я постоянно храню все свои строки UTF-8 std :: string и конвертирую в std :: wstring только тогда, когда мне нужно вызывать некоторые необычные функции.

Это сработало неплохо, я реализовал to_lower, to_upper, iequals для utf8. Однако затем я встретил несколько тупиков std :: regex и регулярные сравнения строк. Чтобы это можно было использовать, мне нужно было бы реализовать собственный класс ustring на основе std :: string с повторной реализацией всех соответствующих алгоритмов (включая регулярное выражение).

По сути, я пришел к выводу, что utf8 не очень подходит для общего использования.А текущий std :: string / std :: wstring - беспорядок.

Однако у меня вопрос: почему значения по умолчанию std :: string и "" просто не изменены для использования UTF8? Тем более, что UTF8 имеет обратную совместимость? Возможно, есть какой-нибудь флаг компилятора, который может это сделать? Конечно, реализация stl должна быть автоматически адаптирована.

Я посмотрел на ICU, но он не очень совместим с apis, предполагающим basic_string, например без начала / конца / c_str и т. д.

9
задан ronag 6 December 2011 в 13:44
поделиться