2016-07-23 38 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/