在Windows控制台中显示unicode国际象棋棋子

时间:2014-12-15 12:11:00

标签: c++ visual-studio unicode console chess

我一直在用C ++(使用MVS2010)开发一个控制台国际象棋游戏,我似乎遇到了一个我自己无法解决的问题。问题是我需要在控制台中显示以下棋子: http://en.wikipedia.org/wiki/Chess_symbols_in_Unicode

我当然经历了大量的论坛,文章和文档,但仍然没有完成任务。我知道有些字符(特别是我需要的字符)无法使用Windows控制台提供的字体显示。但是控制台只支持几种字体:consolas和lucida console。最后一个是很好的显示大量的字符,但不是全部。下面的代码段是最符合我需求的代码之一:

#include <Windows.h>
#include <wchar.h>
int main()
{
    UINT oldcp = GetConsoleOutputCP();
    SetConsoleOutputCP(CP_UTF8);

    wchar_t s[] = L"\x266B";
    int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
    char* m = new char[bufferSize]; 
    WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
    wprintf(L"%S", m); 
    delete[] m; 

    SetConsoleOutputCP(oldcp);

    return 0;
}

当使用它来显示以下字符时,它可以工作:\ x266B(仅在使用Lucida控制台时)。但是当我尝试显示\ x265B时,它会打印一个空方块而不是棋子。 以下是国际象棋角色的链接:http://unicode-table.com/ru/#geometric-shapes

以下代码剪切甚至更清晰,更小,行为与上面的相似:

#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <Windows.h>
int main(){

    //_setmode(_fileno(stdout), _O_U8TEXT);
    //_setmode(_fileno(stdin), _O_U8TEXT);

    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);

    wchar_t * str=L"\x265B\n";
    std::wcout<<str<<std::endl;
    return 0;
}

现在我需要的是找出一个可以显示我需要的字符的字体,但问题是我可以在启动应用程序时以编程方式配置控制台以使其能够显示这些符号吗?

提前致谢!

0 个答案:

没有答案