Pregunta

Durante la semana pasada he estado trabajando en un roguelike juego en C ++ junto con una amigo. En su mayoría demasiado aprender el idioma.

Estoy usando:

A de a donde quiera en la consola wchar_t salida. He tenido éxito en otuputting algunos caracteres Unicode como \ u263B (☻), pero otros, como \ u2638 (☸) acaba de terminar como signos de interrogación (?).

Aquí está el código relevante que utilizo para la salida.

// 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);
}

Podría, por supuesto, caer de nuevo aburrido ANSI-caracteres. Pero sería realmente impresionante para tener la completa Unicode conjunto de caracteres para jugar.

Para resumir:? ¿Cómo se asegura de que los caracteres Unicode se emiten correctamente


Editar:

Ok, así que me di cuenta de mi codificación está funcionando correctamente. El problema es que I necesidad de forzar la terminal para cambiar a un Unicode ricos en tipo de letra más . ¿Hay una manera de plataforma cruzada para hacer esto? hay incluso una manera específica de Windows para hacer esto?

¿Fue útil?

Solución

  

El problema es que necesito para obligar a la terminal para cambiar a un tipo de letra más Unicode ricos. ¿Hay una manera de plataforma cruzada para hacer esto? hay incluso una manera específica de Windows para hacer esto?

Yo tenía un aspecto de esto, pero no pude encontrar una llamada a la API de Windows para hacerlo (lo que puede significar simplemente que no lo encontró, por supuesto). Yo no esperaría encontrar una manera de plataforma cruzada para hacerlo.

La mejor solución que se me ocurre es poner en marcha la consola utilizando una construcción especial archivo "nofollow noreferrer" Shell Enlace (LNK). Si usted lee la formato de archivo de documentación , verá que le permite especificar un tipo de letra.

Pero los problemas no terminan allí. Una configuración regional occidental de instalación de Windows proporciona Lucida Console , pero eso fuente sólo proporciona un subconjunto limitado de grafemas. Asumo que pueda salida / entrada de texto japonés en la consola en un PC con Windows japonés. Que había necesidad de revisar lo que está disponible en un Windows japonesa si quería estar seguro de que funcionaría allí.

Linux (Ubuntu, por lo menos) parece tener soporte mucho mejor aquí, con UTF-8 y proporcionar una fuente con un amplio apoyo grafema. No he comprobado otras distribuciones para ver lo que la historia está ahí, ni he comprobado cómo las fuentes se resuelven en el terminal (si es una cosa X, una cosa Gnome o lo que sea).

Otros consejos

En principio, todos los caracteres Unicode son compatibles con la consola. El hecho de que se está viendo signos de interrogación probablemente tiene que ver con la ayuda de la fuente de esos caracteres. Trate de cambiar la fuente de la consola a algo con buen soporte para Unicode.

Es necesario establecer la página de códigos correctamente. Hay un muy buen artículo sobre eso aquí: enlace

A pesar de que es una bastante grande interruptor, puede intentar utilizar una consola alternativa, especialmente si usted está haciendo un roguelike. libtcod es una biblioteca moderadamente popular, escrito en C con fijaciones C ++, que proporciona una consola a todo color que se puede configurar sus propias fuentes y glifos en. Eso te dará mucha más flexibilidad que estar atrapado con lo que la consola de Windows le da.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top