以下程序最初来自 Josuttis 的书“The C++ Standard Library”,第 2 版,第 903 页。
http://coliru.stacked-crooked.com/a/cab87d0d7d9f8a7b
/**
An input stream reads UTF-8 multibyte characters into wide characters.
Then, an output stream writes these wide characters as UTF-16
multibyte characters with leading byte order marks.
*/
#include <string>
#include <iostream> /// cout
#include <locale> /// wbuffer_convert
#include <codecvt> /// codecvt_utf8<T>>
using namespace std;
int main()
{
// create input stream reading UTF-8 sequences:
wbuffer_convert<codecvt_utf8<wchar_t>>
utf8inBuf(cin.rdbuf());
wistream utf8in(&utf8inBuf);
// create output stream writing UTF-16 sequences:
wbuffer_convert<codecvt_utf16<wchar_t,
0xFFFF,
generate_header>>
utf16outBuf(cout.rdbuf());
wostream utf16out(&utf16outBuf);
// write each character read:
wchar_t c;
while (utf8in.get(c))
{
utf16out.put(c);
}
cout << "Completed!" << endl;
}
给定以下输入:
Hello, World!
程序不打印任何相应的输出。
为什么会这样?如何让程序运行?
最佳答案
我在 Ubuntu 上完成了这项工作。
我不得不在最开始添加这一行,就在 main
之后:
std::cin.sync_with_stdio(false);
否则 utf8inBuf
缓冲区未从 cin
中填充。
然后使用以下命令刷新输出流:
utf16out << flush;
在最后,在 while
循环之后。
关于c++ - wstring_buffer 没有给出输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680648/