UTF-8 популярен, потому что он обычно более компактен, чем UTF-16, с полной точностью. Это также не страдает от проблемы порядка байтов UTF-16.
Это делает его отличным выбором в качестве формата обмена, но поскольку символы кодируются в различные байтовые последовательности (от одного до четырех байтов на символ), с ним не всегда приятно работать. Так что обычно лучше зарезервировать UTF-8 для обмена данными и использовать преобразование в точках входа и выхода.
Для системного внутреннего хранилища (включая дисковые файлы и базы данных), вероятно, будет лучше использовать собственный UTF-16, UTF-16 с некоторым другим сжатием или некоторую 8-битную кодировку "ANSI". Последнее, конечно, ограничивает вас определенной кодовой страницей, и вы можете страдать, если вы работаете с многоязычным текстом. Для локальной обработки данных вам, вероятно, понадобится кодировка "ANSI" или собственный UTF-16. Таким образом, обработка символов становится намного проще .
Так что я бы предположил, что UTF-8 популярен внешне , но реже внутри. Внутренне UTF-8 кажется кошмаром для работы, кроме статических сгустков текста.
Некоторые СУБД, похоже, предпочитают постоянно хранить текстовые объекты в формате UTF-8. Это дает преимущество сжатия (по сравнению с хранением UTF-16) без попытки разработать другую схему сжатия. Поскольку преобразование в / из UTF-8 очень распространено, они, вероятно, используют системные библиотеки, которые, как известно, работают эффективно и надежно.
Самые большие проблемы со схемами "ANSI" связаны с одним небольшим набором символов и необходимостью обрабатывать последовательности многобайтовых наборов символов для языков с большими алфавитами.