Все символы в ASCII могут быть закодированы с использованием UTF-8 без увеличения объема памяти (для обоих требуется один байт памяти).
UTF-8 имеет дополнительное преимущество поддержки символов помимо «ASCII-символов». Если это так, почему мы когда-нибудь выберем кодировку ASCII вместо UTF-8?
Есть ли вариант использования, когда мы выберем ASCII вместо UTF-8?
character-encoding
utf-8
ascii
Pacerier
источник
источник
Ответы:
В некоторых случаях это может ускорить доступ к отдельным персонажам. Представьте себе строку,
str='ABC'
закодированную в UTF8 и в ASCII (и при условии, что язык / компилятор / база данных знает о кодировании)Чтобы получить доступ к третьему
C
символу ( ) из этой строки, используя оператор доступа к массиву, который присутствует во многих языках программирования, вы должны сделать что-то вроде этогоc = str[2]
.Теперь, если строка в кодировке ASCII, все, что нам нужно сделать, это извлечь третий байт из строки.
Если, однако, строка в кодировке UTF-8, мы должны сначала проверить, является ли первый символ одно- или двухбайтовым символом, тогда нам нужно выполнить такую же проверку второго символа, и только тогда мы сможем получить доступ к третьему символу. Разница в производительности будет тем больше, чем длиннее строка.
Это проблема, например, в некоторых механизмах баз данных, где для поиска начала столбца, помещенного «после» VARCHAR в кодировке UTF-8, базе данных требуется не только проверить, сколько символов в поле VARCHAR, но и как много байтов каждый из них использует.
источник
Если вы собираетесь использовать только подмножество UTF-8 US-ASCII (или ISO 646), то ни у одного из них нет реального преимущества; на самом деле все закодировано одинаково.
Если вы собираетесь выйти за пределы набора символов US-ASCII и использовать (например) символы с акцентами, умлаутами и т. Д., Которые используются в типичных западноевропейских языках, то есть разница - большинство из них все еще могут быть закодирован одним байтом в ISO 8859, но при кодировании в UTF-8 потребуется два или более байтов. Есть, конечно, и недостатки: ISO 8859 требует использования некоторых внешних средств для определения используемой кодировки, и он поддерживает только одноиз этих языков одновременно. Например, вы можете кодировать все символы алфавита кириллицы (русский, белорусский и т. Д.), Используя только один байт, но если вам нужно / нужно смешивать их с французскими или испанскими символами (кроме тех, что в US-ASCII) / Подмножество ISO 646) вам в значительной степени не повезло - вы должны полностью изменить наборы символов, чтобы сделать это.
ISO 8859 действительно полезен только для европейских алфавитов. Для поддержки большинства алфавитов, используемых в большинстве алфавитов на китайском, японском, корейском, арабском и т. Д., Вам необходимо использовать совершенно другую кодировку. Некоторые из них (например, Shift JIS для японского) - абсолютная боль, с которой приходится иметь дело. Если есть шанс, что вы когда-нибудь захотите их поддержать, я бы посоветовал использовать Unicode на всякий случай.
источник
ANSI может быть многим, в большинстве случаев это 8-битные наборы символов (например, кодовая страница 1252 в Windows).
Возможно, вы думали об ASCII, который является 7-битным и подходящим подмножеством UTF-8. Т.е. любой действительный поток ASCII также является допустимым потоком UTF-8.
Если вы думаете о 8-битных наборах символов, то одним очень важным преимуществом будет то, что все представляемые символы являются точно 8-битными, тогда как в UTF-8 они могут иметь длину до 24 бит.
источник
Да, есть еще случаи использования ASCII: форматы файлов и сетевые протоколы . В частности, для использования где:
Используя ASCII в качестве кодировки, вы избегаете сложности многобайтового кодирования, сохраняя, по крайней мере, некоторую читабельность.
Пара примеров:
IDAT
означает «данные изображения», аPLTE
значит «палитра».Конечно, вы должны быть осторожны, чтобы данные действительно не были представлены конечным пользователям, потому что если они в конечном итоге становятся видимыми (как это произошло в случае URL-адресов), то пользователи по праву ожидают, что эти данные будут на языке, который они могут читать.
источник
Прежде всего: ваш заголовок использует / d ANSI, а в тексте вы ссылаетесь на ASCII. Обратите внимание, что ANSI не равен ASCII. ANSI включает в себя набор ASCII. Но набор ASCII ограничен первыми 128 числовыми значениями (0 - 127).
Если все ваши данные ограничены ASCII (7-разрядным), не имеет значения, используете ли вы UTF-8, ANSI или ASCII, поскольку и ANSI, и UTF-8 содержат полный набор ASCII. Другими словами: числовые значения от 0 до 127 включительно представляют абсолютно одинаковые символы в ASCII, ANSI и UTF-8.
Если вам нужны символы вне набора ASCII, вам нужно выбрать кодировку. Вы можете использовать ANSI, но тогда вы столкнетесь с проблемами всех различных кодовых страниц. Создать файл на машине A и прочитать его на машине B может / будет производить смешно выглядящие тексты, если эти машины настроены на использование разных кодовых страниц, просто потому, что числовое значение nnn представляет разные символы в этих кодовых страницах.
Этот «ад кодовой страницы» является причиной, по которой был определен стандарт Unicode . UTF-8 - это всего лишь единая кодировка этого стандарта, их гораздо больше. UTF-16 является наиболее широко используемым, поскольку он является родной кодировкой для Windows.
Итак, если вам нужно поддерживать что-либо, кроме 128 символов набора ASCII, мой совет - использовать UTF-8 . Таким образом, это не имеет значения, и вам не нужно беспокоиться о том, с какой кодовой страницей ваши пользователи настроили свои системы.
источник