在尝试将日文段落打印到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();
}
我尝试了T2A
,wcout
和printf
,但都没有。
谢谢!
答案 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控制台上,它显示如下,但我直接从控制台剪切并粘贴到上面的输出,因此您可以看到字符是正确的。
这是添加控制台字体的方法: