Андрей
Высший разум
(466098)
4 года назад
Ничем не лучше. UTF-16 - атавизм тех времён, когда в Unicode существовала только нулевая плоскость (коды символов 0x0000-0xFFFF) и для записи кодов всех символов хватало двух байт. Тогда UTF-16 казалась удачным выбором и потому эта кодировка оказалась встроена и в Windows, и в Java, и в JavaScript... Вот создатели PHP вовремя одумались и работа над PHP 6 со встроенной UTF-16 была прекращена.
Но с появлением символов с кодами от 0x10000 и больше, стало понятно, что UTF-16 - крайне неудачная кодировка, не имеющая никаких преимуществ ни по скорости, ни по объёму данных. Но отказаться от UTF-16 сейчас уже очень сложно - слишком много кода за эти годы написано.
В UTF-16 символы с кодами 0x0000-0xFFFF всегда занимают 2 байта, а символы с кодами от 0x10000 и больше - 4 байта.
В UTF-8 символы с кодами 0x00-0x7F занимают 1 байт, 0x080-0x7FF - 2 байта, 0x0800-0xFFFF - 3 байта, от 0x10000 и больше - 4 байта. Так что нет, по занимаемому объёму UFT-8 в среднем не хуже, чем UTF-16. Но при этом обработка символов в UTF-8 проще, чем в UTF-16.
Микстурка . Знаток (441)
4 года назад
Но ведь для кодирования символов диапазона 0x0800-0xFFFF, utf-8 будет использовать 3 байта, а utf-16 будет вынуждена использовать 4 байта, т. е символ будет занимать больше места в памяти