Вопрос

За прошедшую неделю я работал над roguelike игра в C ++ вместе с другом. В основном тоже изучать язык.

Я использую:

К выводу wchar_tгде бы я ни захотел в консоли. Мне удалось отменить некоторые символы Unicode, такие как U263B (☻), но другие, такие как U2638 (☸), просто в конечном итоге станут вопросительными знаками (?).

Вот соответствующий код, который я использую для вывода.

// Container of room information

struct RoomInfo
{
    wchar_t * layout;
    int width;
    int height;
};

// The following function builds RoomInfo 

RoomInfo Room::examine(IActor * examinor)
{
    RoomInfo ri;
    ri.width = this->width;
    ri.height = this->height;
    ri.layout = new wchar_t[height * width];
    for(unsigned int y = 0; y < height; y++)
    {
        for(unsigned int x = 0; x < width; x++)
        {
            ri.layout[y*width + x] = L'\u263B'; // works
            //ri.layout[y*width + x] = L'\u2638'; // will not work
        }
    }
}

// The following function outputs RoomInfo

void CursesConsole::printRoom(RoomInfo room)
{
    int w = room.width;
    int h = room.height;

    WINDOW * mapw = newwin(h, w, 1, 0);
    for(int y = 0; y < h; y++)
    {
        wmove(mapw, y, 0);
        for(int x = 0; x < w; x++)
        {
            int c = y*w + x;
            waddch(mapw, room.layout[c]);
        }
    }

    wrefresh(mapw);
    delwin(mapw);
}

Я, конечно, мог вернуться к скучным Ansi-characters. Но было бы очень здорово иметь полный набор персонажей Unicode.

Подвести итог: Как вы убедитесь, что символы Unicode выводятся правильно?


Редактировать:

Итак, я понял, что мое кодирование работает правильно. Проблема в том, что Мне нужно заставить терминал переключиться на более богатое юникодом лицу шрифта. Анкет Есть ли кроссплатформенный способ сделать это? Есть ли даже Windows конкретный способ сделать это?

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

Решение

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

Я искал это, но не смог найти призыв Windows API, чтобы сделать это (что может означать, что я, конечно, не нашел его). Я бы не ожидал найти кроссплатформенный способ сделать это.

Лучшее решение, о котором я могу подумать, - это запустить консоль, используя специально построенную Ссылка оболочки (.Lnk) файл. Если вы прочитаете документация формата файла, вы увидите, что это позволяет вам указать шрифт.

Но ваши проблемы на этом не заканчиваются. Западная установка Windows предоставляет Лусида Консоль, но этот шрифт обеспечивает только ограниченное подмножество графем. Я предполагаю, что вы можете вывести/ввести японский текст в консоли на японском ПК с Windows. Вам нужно проверить, что доступно в японских окнах, если вы хотите быть уверенным, что это будет работать там.

Linux (по крайней мере, Ubuntu), похоже, имеет гораздо лучшую поддержку здесь, используя UTF-8 и обеспечивая шрифт с широкой поддержкой графем. Я не проверял другие дистрибуции, чтобы увидеть, что есть эта история, и я не проверял, как разрешены шрифты в терминале (будь то X, гном или что -то в этом роде).

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

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

Вам нужно правильно установить кодовую страницу. Здесь есть довольно хорошая статья: ссылка на сайт

Хотя это довольно большой переключатель, вы можете попробовать использовать альтернативную консоль, особенно если вы делаете roguelike. libtcod является умеренно популярной библиотекой, написанной в C с привязками C ++, которая обеспечивает полноцветную консоль, в которой вы можете настроить свои собственные шрифты и глифы. Это должно дать вам гораздо большую гибкость, чем застрять в том, что дает вам консоль Windows.

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