以下程序最初来自Josuttis'书" C ++标准库",第二版,第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!
程序不会打印任何相应的输出。
为什么会这样?如何让程序运行?
答案 0 :(得分:1)
我在Ubuntu上做了这个工作。
我必须在main
:
std::cin.sync_with_stdio(false);
否则utf8inBuf
缓冲区未从cin
填充。
用以下内容刷新输出流:
utf16out << flush;
最后,在while
循环之后。