Когда использовать Unicode (кроме с не-Unicode!) - PullRequest
2 голосов
/ 24 октября 2011

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

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

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

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

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

P.S. потрясающий сайт

Ответы [ 3 ]

5 голосов
/ 24 октября 2011

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

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

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

4 голосов
/ 25 октября 2011

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

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

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

1 голос
/ 25 октября 2011

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

...