我有一些以多字节UTF8格式存储的字符串,我想在控制台中以固定宽度的空间打印它们。我将通过以下方式来实现这个目标:
wprintf(L"////////////// BLOCK 1 /////////////// ////////////// BLOCK 2 /////////////// ////////////// BLOCK 3 ///////////////\n");
wprintf(L"// %-32S // // %-32S // // %-32S //\n", mymemcard[0].filename, mymemcard[1].filename, mymemcard[2].filename);
wprintf(L"// %-32S // // %-32S // // %-32S //\n", mymemcard[0].titleUTF, mymemcard[1].titleUTF, mymemcard[2].titleUTF);
wprintf(L"////////////////////////////////////// ////////////////////////////////////// //////////////////////////////////////\n\n");
文件名变量以ASCII格式存储并可以正常使用,但是如果包含多字节字符,则titleUTF变量将打印出太短的结果。我认为这是因为wprintf函数在计算宽度时包括了多字节字符的每个字节。请参见以下输出:
![enter image description here](https://istack.dev59.com/xJGms.webp)
我尝试使用“%-32lS”,但这会将垃圾打印到控制台中,并且我尝试使用小写“s”,但这也会打印垃圾。有什么办法可以在多字节字符的情况下获得固定宽度的打印输出呢?
编辑:
以下是内存中显示titleUDF变量及其包含的冒犇THPS2字符串字节的屏幕截图:
![enter image description here](https://istack.dev59.com/Avamx.webp)
SetConsoleCP(65001);
SetConsoleOutputCP(65001);
为使多字节字符正常显示,我必须更改控制台中的字体为具有这些字符的字形的字体。我使用NSimSun。