Тип проекта C ++: Unicode против многобайтовых;плюсы и минусы - PullRequest
29 голосов
/ 17 июня 2010

Мне интересно, что думает сообщество по переполнению стека, когда дело доходит до создания проекта (в первую очередь здесь c ++) с юникодом или многобайтовым набором символов.

  • Есть ли плюсы для перехода на Unicode? с самого начала, подразумевая все ваши строки будут в широком формате? Есть проблемы с производительностью / больше требования к памяти из-за стандартное использование большего символа?

  • Есть ли преимущество у этого метода? У некоторых процессорных архитектур лучше обрабатывать широкие символы?

  • Есть ли причины, чтобы проект Unicode, если вы не планируете поддержка дополнительных языков?

  • Какие причины будут иметь для создания проекта с многобайтовым набором символов?

  • Как все вышеперечисленные факторы сталкиваются в высокопроизводительной среде (такой как современная видеоигра)?

Ответы [ 6 ]

26 голосов
/ 17 июня 2010

Два вопроса, которые я бы прокомментировал.

Во-первых, вы не упоминаете, на какую платформу вы нацеливаетесь. Хотя последние версии Windows (Win2000, WinXP, Vista и Win7) поддерживают как многобайтовые, так и Unicode-версии системных вызовов с использованием строк, Unicode-версии работают быстрее (многобайтовые версии являются обертками, которые преобразуются в Unicode, вызывают Unicode-версию, а затем преобразуют все возвращенные Строки обратно в мультлибайт). Поэтому, если вы делаете много вызовов такого типа, Unicode будет быстрее.

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

11 голосов
/ 17 июня 2010

Вы говорите о настройке проекта VC ++ здесь, верно?

Единственное, на что он влияет, - это версия Win32 API, которую он вызывает. Например, вызов MessageBox закончится вызовом MessageBoxA в случае многобайтовой настройки и MessageBoxW в случае настройки Unicode. Конечно, это также повлияет на типы строковых параметров для этих функций. Внутренне MessageBoxA вызывает MessageBoxW после преобразования параметров строки из текущей локали системы в Unicode.

Мой совет - использовать настройки Юникода и передавать строки Юникода в вызовы Win32 API. Это не мешает вам использовать строки в любой другой кодировке для внутреннего использования.

10 голосов
/ 17 июня 2010

Короткий ответ (ИМО, и я ошибался) заключается в том, что лучше планировать худшее (или лучше всего, в зависимости от вашей точки зрения) и делать Unicode прямо сейчас.

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

Макс.

8 голосов
/ 22 июня 2010

Вот простое соображение: должна ли ваша программа работать, если она используется мистером 菅 直 人? Его домашний каталог может быть трудно представить в ASCII.

6 голосов
/ 18 июня 2010

Есть ли плюсы в использовании Unicode с самого начала,

Через несколько лет и миллион строк кода вам захочется, чтобы вы ответили "да".

подразумевается, что все ваши строки будут в широкоформатном формате?

Я бы хотел, чтобы Microsoft прекратила смешивать Unicode с UTF-16.

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

Недостатком использования UTF-8 в Windows является то, что он неподдерживается как кодовая страница ANSI, поэтому вам нужно преобразовать строки в UTF-16 для выполнения вызовов WinAPI.Сколько неудобств это вызывает, зависит от того, пишете ли вы программу для Windows или программу, которая просто запускается в Windows.

1 голос
/ 17 июня 2010

Первый ответ на этот вопрос должен ... ответить на все, что вам нужно знать.

...