Основная проблема - это смешение представления и кодировки в памяти.
Ни одна из кодировок Unicode действительно не поддается обработке текста.В целом пользователи будут заботиться о графемах (что на экране), в то время как кодировка определяется в виде кодовых точек ... а некоторые графемы состоят из нескольких кодовых точек.
Таким образом, когда кто-то спрашивает: чтоявляется 5-м символом "Hélène"
(французское имя), вопрос довольно запутанный:
- С точки зрения графем ответ:
n
. - С точки зрения кодаточки ... это зависит от представления
é
и è
(они могут быть представлены либо в виде одной кодовой точки, либо в виде пары, используя диакритические знаки ...)
В зависимости отисточник вопроса (конечный пользователь перед ее экраном или процедура кодирования), ответ совершенно другой.
Поэтому я думаю, что реальный вопрос - Почему мы говорим о кодировках здесь?
Сегодня это не имеет смысла, и нам потребуются два «представления»: графемы и кодовые точки.
К сожалению, интерфейсы std::string
и std::wstring
были унаследованы оттигде люди считали, что ASCII было достаточно, и достигнутый прогресс на самом деле не решил проблему.
Я даже не понимаю, почему следует указывать представление в памяти, это деталь реализации.Все, что нужно пользователю, это:
- , чтобы иметь возможность читать / писать в UTF- * и ASCII
- , чтобы иметь возможность работать с графемами
- , чтобы бытьвозможность редактировать графемы (для управления диакритическими знаками)
... кого волнует, как она представлена?Я думал, что хорошее программное обеспечение было построено на инкапсуляции?
Ну, C заботится, и мы хотим совместимости ... поэтому я думаю, что это будет исправлено, когда C будет.