2016-07-23 20 views
0

尝试将日语段落打印到Windows控制台时,出现了几个问号。在查看十六进制代码后,我发现它们都被称为“katakana middle dot”。所有其他角色除了这一个单独显示外,通常都会显示。经过几次谷歌搜索之后,我发现this post说这个字符是一个unicode,而Windows可能不支持它。任何想法解决这个问题或请告诉我,这是不可能在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

您是否获得了输出在Windows控制台窗口?您运行的是Windows的本地化版本,因为控制台具有不同的字体支持和编码默认值。美国Windows默认情况下不会在控制台中打印日语,但日语Windows会。 'chcp'命令的结果是什么?另外一个完整的工作示例将会有所帮助。请参阅http://stackoverflow.com/help/mcve。 –

+0

@MarkTolonen是的,我正在使用Windows控制台。我的windows是中文版的,'chcp'的输出是65001(因为我手动设置了它)。我已经更新了一些问题,使其更加清晰。 – zzy

+0

因此,您的中文版本使用不支持该特定字符的控制台字体。如果您将段落写入UTF-8编码文件并使用记事本或记事本++等GUI工具读取它们,他们可能会使用可显示它的字体。另一种选择是将非Unicode程序的语言和区域设置更改为日语,或者谷歌如何将控制台字体更改为支持日语的字体。 –

回答

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/