Как я могу написать арабскую строку в C++, используя Codeblocks?

Может кто-нибудь сказать мне, как я могу написать арабскую строку в C++? Я использую кодовые блоки.

Я искал по всему интернету, чтобы увидеть, как я могу вставить арабскую строку в код C++, но я ничего не достиг

4 ответа

Существует несколько типов строковых литералов, доступных для использования в C++. В то время как наиболее распространенный тип, узкий многобайтовый строковый литерал, выглядит так:

auto myliteral = "";

Есть и другие.

в частности, вы можете искать строковый литерал utf-8, записанный так:

auto myutf8literal = u8"عربي";

все варианты базового строкового литерала начинаются с некоторой комбинации символов:

// ex.     description                       storage

L"";    // wide string literal              wchar_t[]
u8"";   // utf-8 encoded string literal     char[]
u"";    // utf-16 encoded string literal    char16_t[]
U"";    // utf-32 encoded string literal    char32_t[]

R"delim()delim";
        // raw string literal, modifier to indicate no escapes in string
        // can be combined with any of the above string literal types

и большинство из них может содержать гораздо большее разнообразие символов, чем базовый строковый литерал. u8, u а также U держать набор символов Unicode, который является довольно массивным набором символов.

Что вам следует знать, так это то, что отображение этой строки в средах с минимальными возможностями отображения, а не просто запись в файл, создает дополнительные сложности. В качестве примера: консоль Windows сильно ограничена в том, какие символы она может отображать, и использует то, что называется кодовой страницей, чтобы решить, как отображать определенные символы. У него есть кодовая страница utf-8, хотя с ней, похоже, есть некоторые проблемы.

Подробнее о работе с выводом арабской консоли в Linux смотрите в ответе @cup.

Первое, что вы должны рассмотреть, это где вы печатаете текст. Если вы печатаете его на консоли, в Linux используйте acon. В Windows перейдите на кодовую страницу 1256 и измените шрифт на Lucida Console.

Арабский язык - это скорописная письменность, написанная справа налево. Когда вы вводите текст как назначение, текст, который вы пишете, слева направо. Так что если у вас есть

wchar_t* monday = L"الإثنين";

Он состоит из отдельных букв ال إ ث ن ي ن (равнозначно английскому ядному). Если вы попытаетесь отобразить его, вы можете получить ال إ ث ن ي ن или ن ي ن ث إ ل ا, в зависимости от того, как выполняется печать. Некоторые системы понимают справа налево, некоторые нет. Это может ввести в заблуждение, поскольку вы не хотите вводить "yadnom si yadot" вместо "сегодня понедельник". Если вы введете "сегодня понедельник" и вернете "ядом си ядот", то вам нужно будет повернуть строку вспять, прежде чем распечатать ее.

Следующая проблема заключается в том, что если вы введете ال إ ث ن ي ن, вы можете не получить الإثنين, потому что система не знает о объединенной записи. Если вы посмотрите дальше вниз в наборе символов Unicode, вы обнаружите, что каждая буква имеет четыре формы.

  1. Standalone
  2. С буквой справа и ничего не слева
  3. С буквой слева и ничего справа
  4. С буквой слева и справа.

Вы должны выбрать правильную форму каждой буквы, в зависимости от того, что у нее есть с обеих сторон. Как только вы это сделаете, вы получите ال Checkنين Проверьте, что алеф справа, а не слева.

Следующая проблема - то, где вы печатаете это. Если вы используете систему слева направо, которая ничего не знает о сценариях справа налево, текст должен быть измерен и правильно размещен перед печатью.

Если вы планируете сделать какое-либо оправдание, помните, что арабский не увеличивает расстояние между словами: он увеличивает длину слов с помощью специального символа, называемого кашида.

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

Вы можете использовать wprintf: http://www.cplusplus.com/reference/cwchar/wprintf/

wprintf (L "Изолированная форма: %lc ", L'ﺕ');

Или вы можете использовать номер для этого?

wprintf (L "Изолированная форма: %lc ", 65173);

Это связано с кодировкой символов. Большинство реализаций используют UTF-8. Смотрите http://utf8everywhere.org/

Некоторые библиотеки программного обеспечения (например, GTK и Qt) могут отображать строку UTF-8 с арабскими и латинскими предложениями (например, с изменением направления).

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