I am using Visual Studio C++ 2008 (Express). When I run the below code, the wostream (both std::wcout, and std::wfstream) stops outputting at the first non-ASCII character (in this case Chinese) encountered. Plain ASCII characters print fine. However, in the debugger, I can see that the wstrings are in fact properly populated with Chinese characters, and the output << ... is in fact getting executed.
The project settings in the Visual Studio solution are set to "Use Unicode Character Set". Why is std::wostream failing to output Unicode characters outside of the ASCII range?
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(); }