先週、私はroguelikeのゲームをC++で、友達と一緒に作業してきました。ほとんどはあまりにも言語を学ぶ。Windows端末でユニコード文字を出力する
私が使用しています:
- pdcurses
- のWindows 7
- のVisual Studio C++
を出力wchar_t
年代に私がコンソールにしたいところはどこでも。私は\ 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文字を使用することもできます。しかし、完全なユニコードセットのキャラクターで遊ぶのは本当に素晴らしいことです。
合計:ユニコード文字が正しく出力されるようにするにはどうすればよいですか?
編集:
[OK]をので、私は私のエンコードが正しく動作している考え出しました。問題は、私はよりユニコード豊富なフォントフェイスに切り替えることを強制する必要があります。これを行うためのクロスプラットフォームの方法はありますか?これを行うためのWindows固有の方法さえありますか?
Spolskyの「すべてのソフトウェア開発者が絶対に最低限必要なことは、絶対にUnicodeと文字セットについて肯定的に知っておく必要があります。明らかに、キャラクターセットを使って作業する場合、次の息をとる前にそれを読んでいるはずです。http://www.joelonsoftware.com/articles/Unicode.html –
私はキャラクターセットに関するいくつかの経験がありますが、それを読んでいません特定の記事。私はそれをチェックします、チップのおかげで:) –