用C++打印国际象棋unicode字符,并使字符大小为正方形
Print chess unicode characters in C++, and make characters square sized
我想问一下,在C++的控制台窗口中编写国际象棋unicode字符的最简单方法是什么?(♙♘♗♖♕♔♟♞♝♜♛♚)它们是unicode中"杂项符号"块的一部分。https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode
我还想打印正方形大小的字符,现在我的棋盘不是正方形的,因为每个字符都是矩形而不是正方形。
能在棋盘下用普通的非方块字写字也很好,但这可能是不可能的?要在同一控制台窗口中混合不同的字体/格式吗?
好的,提前谢谢!:)
问题的第一部分,输出这些字符,取决于平台。Linux控制台通常使用UTF-8,如果是这样的话,您可以将字符编码为UTF-8并将其写入标准输出。在Windows上,您可以使用Console API(WriteConsole函数):
HANDLE handle = GetStandardHandle(STD_OUTPUT_HANDLE);
DWORD written = 0;
// explicitly call the wide version (which always accepts UTF-16)
WriteConsoleW(handle, L"u2658", 1, &written, NULL);
一个很难解决的问题是,您需要一个包含这些字符的控制台字体。
对于方形单元格,这取决于控制台渲染文本的许多细节。如果它使用字体替换,那么文本实际上可能不会是等宽的。
现在,如果您有一个包含这些字符的控制台字体,而则该字体是单空格的,那么您可以通过在字符之间添加一些间距来绘制一个方形板。可以使用块元素,如▌
U+258C--LEFT HALF block来绘制棋盘:▌♘▐█▌ ▐
。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 将字符 * 转换为字符串 *
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 将单个字符转换为 std::string 前缀 \x01
- 将部分字符*替换为较小的字符*