我正在使用 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();
}