Есть ли причина не использовать UTF-8, 16 и т. Д. Для всего? - PullRequest
8 голосов
/ 15 января 2011

Я знаю, что в последнее время сеть в основном стандартизируется к UTF-8, и мне было просто интересно, есть ли место, где использование UTF-8 было бы плохо.Я слышал аргумент, что UTF-8, 16 и т. Д. Могут использовать больше места, но в итоге это было незначительным.

Кроме того, как насчет программ Windows, оболочки Linux и тому подобного -можете ли вы безопасно использовать UTF-8 там?

Ответы [ 3 ]

1 голос
/ 15 января 2011

Если доступен UTF-32, предпочтите его другим версиям для обработки.

Если ваша платформа изначально поддерживает Unicode UTF-32 / UCS-4, то «сжатые» версии UTF-8 и UTF-16 могут работать медленнее, поскольку они используют различное количество байтов для каждого символа (последовательности символов), что делает невозможным прямой поиск в строке по индексу, в то время как UTF-32 использует 32-битное «плоское» значение для каждого символа, что значительно ускоряет некоторые строковые операции.

Конечно, если вы программируете в очень ограниченной среде, такой как, например, встроенные системы, и можете быть уверены, что вокруг будут только символы ASCII или ISO 8859-x, когда-либо , тогда вы можете выбрать эти кодировки для эффективности и скорости. Но в целом придерживайтесь Форматы преобразования Unicode .

0 голосов
/ 14 ноября 2011

Хорошо известно, что 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 байтов даже для обычных случаев.Больше данных, больше обработки.

0 голосов
/ 15 января 2011

Когда вам нужно написать программу (выполняющую манипуляции со строками), которая должна быть очень очень быстрой и вы уверены, что вам не понадобятся экзотические символы, возможно, UTF-8 не лучшая идея.В любых других ситуациях UTF-8 должен быть стандартом.

UTF-8 хорошо работает практически на всех последних версиях программного обеспечения, даже на Windows.

...