在Windows控制台中显示片假名中间点

时间:2016-07-23 00:36:12

标签: windows unicode

在尝试将日文段落打印到Windows控制台时,我收到了几个问号。在查看十六进制代码后,我发现所有这些代码都被称为" katakana middle dot"。除了这一个字符外,所有其他字符都会正常显示。经过一些谷歌搜索,我发现this post说这个字符是unicode,而Windows可能不支持它。有任何想法可以解决这个问题,或者请告诉我这在Windows上是不可能的。

以下是我的相关代码:

CString file_path;
// ... somehow read the string ...
FILE *fStream;
errno_t e = _tfopen_s(&fStream, file_path, _T("rt,ccs=UTF-8"));
if (e != 0)
{
        cout << "Read failed" << endl;
        return;
}
else
{
        CStdioFile f(fStream);
        CString buffer;
        while (f.ReadString(buffer))
        {
            CString str(buffer);
            // All other characters are fine except for 30fb
            cout << W2A(str) << endl;
        }
        f.Close();
}

我尝试了T2Awcoutprintf,但都没有。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个将Unicode字符正确输出到控制台的示例,但控制台字体必须支持字符。请注意,源将保存为带有BOM的UTF-8,以支持字符串中的Unicode字符。

#include <iostream>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"ASCII 汉语\u30fb日本語\n");
}

输出:

ASCII 汉语・日本語

请注意,在我的美国Windows控制台上,它显示如下,但我直接从控制台剪切并粘贴到上面的输出,因此您可以看到字符是正确的。

enter image description here

这是添加控制台字体的方法:

http://www.howtogeek.com/howto/windows-vista/stupid-geek-tricks-enable-more-fonts-for-the-windows-command-prompt/