Основы Юникода в Windows - PullRequest
       24

Основы Юникода в Windows

2 голосов
/ 11 февраля 2009

У меня есть библиотека C ++, которую я поставляю другим разработчикам. Одному из них нужен i18n, поэтому он спросил меня, могу ли я добавить префикс L к строкам в API.

Я не очень разбираюсь в i18n, поэтому у меня есть несколько основных вопросов:

  1. Когда я компилирую свою библиотеку с помощью Unicode, могут ли другие разработчики использовать эту сборку как обычно? Или разработчики также должны изменить свои настройки Visual Studio для использования Юникода?

  2. Когда я компилирую свою библиотеку с помощью Unicode, нужно ли мне менять все строки в заголовках и файлах .cpp? Или достаточно добавить префикс L к строкам в заголовочных файлах?

Заранее спасибо!

Пол

Ответы [ 2 ]

3 голосов
/ 11 февраля 2009

Добавление префикса L изменяет строку из массива char в массив short. Лучшая альтернатива - обернуть все строки макросом «TEXT», т.е.

TEXT("My string")

Если ваша сборка является сборкой Unicode, все ваши строки становятся массивом short с, но если нет, они остаются массивом char с. Windows также предоставляет следующие типы:

LPWSTR = short *

LPTSTR = short *, or char * if UNICODE not defined

LPSTR = char *

Не забывайте, хотя; даже если вы добавили к своим строкам префикс L или добавили TEXT, вам необходимо убедиться, что вы вызываете нужные функции. Стандартный Windows string API, такой как lstrlen, автоматически переключается с char * на short *, если определено UNICODE, но вам нужно убедиться, что вы не используете функции, которые используют только char *.

Функции, которые ваша библиотека экспортирует с использованием строк, также повредят старые приложения, которые используют вашу библиотеку, поскольку эти приложения будут по-прежнему передавать и массив char с, а не short с, так что вы, вероятно, захотите работать в там какая-то обратная совместимость.

3 голосов
/ 11 февраля 2009

Существует гораздо больше, чем поддержка Unicode для интернационализации (i18n). С макушки головы есть:

  • Валюта
  • Числовое представление
  • Текстовые кодировки (частично абстрагированные от использования Unicode)
  • Скрипты справа налево
  • Механизмы перевода текста

Большая часть этого доступна в той или иной форме через APis на Window, будь то Win32 или .Net и т. Д. Я предлагаю вам взглянуть на:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...