Mar*_*der 6 c++ windows unicode curses wchar-t
在过去的一周里,我和朋友一起用C++ 编写了一个roguelike游戏.大部分也学习语言.
我正在使用:
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);
}
Run Code Online (Sandbox Code Playgroud)
我当然可以依靠无聊的ANSI字符.但是拥有完整的unicode字符集真的很棒.
总结一下:如何确保正确输出unicode字符?
编辑:
好的,所以我发现我的编码工作正常.问题是我需要强制终端切换到更富含unicode的字体.有没有跨平台的方式来做到这一点?甚至有一个特定于Windows的方法来做到这一点?
问题是我需要强制终端切换到更丰富的 unicode 字体。有没有跨平台的方法来做到这一点?有没有一种特定于 Windows 的方法可以做到这一点?
我查了一下,但找不到 Windows API 调用来执行此操作(当然,这可能意味着我没有找到它)。我不希望找到一种跨平台的方法来做到这一点。
我能想到的最佳解决方案是使用专门构建的Shell 链接(.LNK) 文件启动控制台。如果您阅读了文件格式文档,您会发现它允许您指定字体。
但你的问题还不止于此。Windows 的西方语言环境安装提供了Lucida Console,但该字体仅提供有限的字形子集。我假设您可以在日语 Windows PC 上的控制台中输出/输入日语文本。如果您想确保它可以在日语 Windows 上运行,您需要检查哪些功能可以在日语 Windows 上使用。
Linux(至少是 Ubuntu)似乎在这里有更好的支持,使用 UTF-8 并提供具有广泛字形支持的字体。我没有检查其他发行版来了解其中的故事,也没有检查终端中如何解析字体(无论是 X 事物、Gnome 事物还是其他事物)。
归档时间: |
|
查看次数: |
2811 次 |
最近记录: |