在过去的一周里,我一直在和一个朋友一起用 C++ 开发一个roguelike游戏。主要也是学习语言。
我正在使用:
- 诅咒
- Windows 7的
- 视觉工作室 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 字符。但是拥有完整的 unicode 字符集可以玩真的很棒。
总结一下:如何确保正确输出 unicode 字符?
编辑:
好的,所以我发现我的编码工作正常。问题是我需要强制终端切换到更丰富的 unicode 字体。有没有跨平台的方法来做到这一点?甚至有Windows特定的方法来做到这一点吗?