将unicode字符存储在新行的.txt文件中

时间:2018-01-16 08:53:07

标签: c++ unicode file-handling

如何使用C ++在单独的行中将Unicode字符存储在文本文件中?我尝试使用\n\r;还有他们的hex值。但是,在.txt文件中\n\r被视为垃圾值。

以下是代码段:

{
    std::wofstream wof;
    wof.imbue(std::locale(std::locale::empty(), new std::codecvt_utf16<wchar_t, 
    0x10ffff, std::generate_header>));
    wof.open(L"file3.txt");
    wof << L"Test.\x263a \x263c \x263d \x263e A:B:C, 我一个人来  人人都爱喝可乐。 " << endl;
    wof << L"\n  Another test. \x002c \x263a \263e" << endl;
    wof << L"\n  我一个人来。      一个人     我一个人来  人人都爱喝可乐。" << endl;
    wof << L" Test \x263a \x263c \x263d \x263e 我一个人来  人人都爱喝可乐。 " << endl;
    wof << L"\n 我一个人来  人人都爱喝可乐。" << endl;
}

1 个答案:

答案 0 :(得分:0)

如图所示以二进制文件打开文件并添加BOM标记L"\xFEFF"以指示文件是UTF-16(LE)模式。使用此方法,您需要pubsetbuf

使用L"\r\n"作为行尾

std::wofstream wof(L"file3.txt", std::ios::binary);
if(wof)
{
    wchar_t buf[128];
    wof.rdbuf()->pubsetbuf(buf, 128);

    wof << L"\xFEFF";

    wof << L"Test.\x263a \x263c \x263d \x263e A:B:C, 我一个人来  人人都爱喝可乐。\r\n";
    wof << L"Another test. \x002c \x263a \263e\r\n";
}