【发布时间】:2012-05-08 23:09:44
【问题描述】:
代码如下:
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 文本文件中?谢谢。
【问题讨论】:
-
2应该是sizeof(wchar_t),不是吗? -
2只是为了简化,在原始代码中当然有std::wstring::value_type。 -
小心你的术语。 Unicode 是代码点的规范。从技术上讲,您存储在文件中的是 Unicode 编码。如果您使用的是 Windows 和 wchar_t,这可能是 UTF-16
标签: c++ windows unicode newline wstring