Хорошо известно, что utf-8 лучше всего подходит для хранения файлов и сетевого транспорта.Но люди спорят, лучше ли utf-16/32 для обработки.Одним из основных аргументов является то, что utf-16 по-прежнему переменной длины и даже utf-32 по-прежнему не одна кодовая точка на символ, так как они лучше, чем utf-8?Мое мнение таково, что utf-16 - это очень хороший компромисс.
Во-первых, символы вне BMP, которым требуются двойные кодовые точки в utf-16, используются крайне редко.Китайские иероглифы (также некоторые другие символы Азии) в этом диапазоне в основном мертвые.Обычные люди не будут использовать их вообще, кроме экспертов используют их для оцифровки древних книг.Таким образом, utf-32 будет пустой тратой времени.Не беспокойтесь слишком сильно об этих персонажах, так как они не сделают ваше программное обеспечение плохо выглядящим, если вы не справитесь с ними должным образом, если ваше программное обеспечение не для этих специальных пользователей.
Во-вторых, частонам нужно, чтобы распределение строковой памяти было связано с количеством символов.например, столбец строки базы данных для 10 символов (при условии, что мы храним строку в кодировке Юникод в нормализованной форме), которая будет составлять 20 байтов для utf-16.В большинстве случаев он будет работать именно так, за исключением крайних случаев, он будет содержать только 5-8 символов.Но для utf-8 общая длина байта одного символа составляет 1-3 для западных языков и 3-5 для азиатских языков.Это означает, что нам нужно 10-50 байтов даже для обычных случаев.Больше данных, больше обработки.