Visual Studio C++ 2008 (Express) を使用しています。以下のコードを実行すると、wostream (std::wcout
との両方std::wfstream
) は最初の非 ASCII 文字 (この場合は中国語) に遭遇した時点で出力を停止します。プレーン ASCII 文字は正常に印刷されます。ただし、デバッガーでwstring
は、実際には s に漢字が適切に入力されており、output << ...
が実際に実行されていることがわかります。
Visual Studio ソリューションのプロジェクト設定は、「Unicode 文字セットを使用する」に設定されています。std::wostream
ASCII 範囲外の Unicode 文字を出力できないのはなぜですか?
void PrintTable(const std::vector<std::vector<std::wstring>> &table, std::wostream& output) {
for (unsigned int i=0; i < table.size(); ++i) {
for (unsigned int j=0; j < table[i].size(); ++j) {
output << table[i][j] << L"\t";
}
//output << std::endl;
}
}
void TestUnicodeSingleTableChinesePronouns() {
FileProcessor p("SingleTableChinesePronouns.docx");
FileProcessor::iterator fileIterator;
std::wofstream myFile("data.bin", std::ios::out | std::ios::binary);
for(fileIterator = p.begin(); fileIterator != p.end(); ++fileIterator) {
PrintTable(*fileIterator, myFile);
PrintTable(*fileIterator, std::wcout);
std::cout<<std::endl<<"---------------------------------------"<<std::endl;
}
myFile.flush();
myFile.close();
}