Когда использовать Unicode (кроме с не-Unicode!)

Я не нашел много (краткой) информации о том, когда именно использовать Unicode. Я понимаю, что многие говорят, что лучшая практика - это всегда использовать Unicode. Но строки Юникода действительно имеют больший объем памяти. Правильно ли сказать, что Unicode должен использоваться только тогда, когда

  • Печать чего-либо на экране, кроме локального (например, отладочного) использования.
  • Как правило, отправка любого типа текста по сети, причем оба конца находятся в разных локалях / странах
  • Когда вы не уверены, какой использовать

Я думаю, что было бы полезно, если бы кто-то объяснил основы (краткие) того, что на самом деле происходит с Unicode... Правильно ли я сказать, что все становится грязно, когда:

  • физическая (байтовая) строка отправляется на компьютер с использованием представления строк (кодовая страница, другие... это уже подробно, хотя интересно), отличных от отправителя.

В контексте используется Unicode на языке программирования (скажем, C++), но я надеюсь, что ответы на этот вопрос можно использовать для любой ситуации кодирования.
Кроме того, я знаю, что Unicode и NLS - это не одно и то же, но правильно ли говорить, что NLS подразумевает использование Unicode?

PS офигенный сайт

3 ответа

Всегда используйте Unicode, это избавит вас и других от большой боли.

Что вы, возможно, смутили, так это проблема кодирования. Строки Unicode не обязательно занимают больше памяти, чем эквивалентные строки ASCII (или другая кодировка), что во многом зависит от используемой кодировки.

Иногда "Unicode" используется как синоним для "UCS-2" или " UTF-16". Строго говоря, использование неверно, потому что "Юникод" - это стандарт, который определяет набор символов и их кодовые точки Юникода. Он не определяет отображение в байтах (или словах). UTF-16, UTF-8 и другие кодировки берут на себя задачу преобразования символов в конкретные байты.

Прелесть Unicode в том, что он освобождает вас от ограничений и множества головных болей. Unicode - это самый большой набор символов, доступный на сегодняшний день, т.е. он позволяет вам фактически кодировать и использовать практически любой символ любого основного языка, используемого сегодня на полпути. С любым другим набором символов вам нужно подумать о том, может ли он на самом деле кодировать символ или нет. Latin-1 не может кодировать символ "あ", Shift-JIS не может кодировать символ "ڥ" и так далее. Только если вы уверены, что вам никогда не понадобится ничего, кроме базовой латиницы / арабского / японского / любого другого подмножества символов, вы должны выбрать специальную кодировку, такую ​​как Latin-1, BIG-5, Shift-JIS или ASCII.

Unicode - это самая универсальная кодировка из доступных и, следовательно, является хорошим стандартом.

Unicode-кодировки не являются чем-то особенным, они просто немного сложнее в своем битовом представлении, поскольку им приходится кодировать гораздо больше символов, в то же время пытаясь экономить место. Для очень подробного ознакомления с этой темой, пожалуйста, посмотрите, что каждый программист абсолютно, положительно должен знать о кодировках и наборах символов для работы с текстом.

У меня есть небольшая утилита, которая иногда помогает увидеть разницу между кодировками символов. http://sodved.awardspace.info/unicode.pl. Если вы вставите в ö в Raw (UTF-8) В поле вы увидите, что он представлен разными байтовыми последовательностями в разных кодировках. И, как описывают два других хороших ответа, некоторые не-Unicode-кодировки не могут это представить вообще.

Другие вопросы по тегам