Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Максимум.

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

Есть ли плюсы с пути к Unicode прямо с самого начала,

Несколько лет и миллион линий кода позже вы пожелаете, чтобы вы ответили «Да».

Подразумевая все ваши строки будут в широком формате?

Хотелось бы, чтобы Microsoft выйдут Collating «Unicode» с UTF-16.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top