gpt4 book ai didi

c++ - endl 不适用于 wstring (unicode)

转载 作者:可可西里 更新时间:2023-11-01 13:50:51 27 4
gpt4 key购买 nike

代码如下:

  std::ofstream f("file1.txt");
f<<"123"<<std::endl<<"456"; //(*1)

/*std::stringstream ordinary_strstream; This works too
ordinary_strstream<<"123"<<'\n'<<"456";
f<<ordinary_strstream.str();*/

std::wstringstream s;
s<<L"123"<<std::endl<<L"456"; //(*2)
s<<L"123"<<L"\n"<<L"456"; //(*3)
s<<"123"<<WCHAR(13)<<WCHAR(10)<<"456";//(*4)

HANDLE h =CreateFileW(L"file2.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

ULONG l;
WriteFile(h, s.str().c_str(), s.str().length() * 2, &l, NULL);

在 (*1) 的情况下有一个换行符,在 (*2) 和 (*3) 的情况下,我在 file2.txt 中看不到换行符。在 (*3) 中有一个换行符。我使用 notepad.exe 进行浏览。十六进制编辑器没有显示 0x0D 字节,只有 0x0A

我应该如何正确地将换行符放入 unicode 文本文件中?谢谢。

最佳答案

这是预期的:std::endlL'\n' 写入宽字符流(并刷新它,但此处不相关),从不L"\r\n"。当编写文字 L"\n" 时,这一点更加明显。 WriteFile 不执行任何类型的换行符替换,wstringstream 也不执行(请注意,文件流在以文本模式打开时执行执行换行符替换,这就是您在 (*1)) 中获得正确换行符的原因。因此,文件中不会有回车符。如果你想要它们,请明确地写出来。

关于c++ - endl 不适用于 wstring (unicode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com