Как я могу написать арабскую строку в 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, вы обнаружите, что каждая буква имеет четыре формы.
- Standalone
- С буквой справа и ничего не слева
- С буквой слева и ничего справа
- С буквой слева и справа.
Вы должны выбрать правильную форму каждой буквы, в зависимости от того, что у нее есть с обеих сторон. Как только вы это сделаете, вы получите ال 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 с арабскими и латинскими предложениями (например, с изменением направления).