我正在尝试将扩展字符写入文件。
我的方法是使用
std::wofstream
,但下面的代码将写“foo”并停在那里(它不写小,也不写酒吧)。
#include <fstream>
int main()
{
{
std::wofstream StreamFileWrite(L"C:\\out.txt");
if (StreamFileWrite.is_open())
{
wchar_t f = 0x0066;
StreamFileWrite << f;
StreamFileWrite << L"oo";
wchar_t c = 0x5C0F; //random unicode symbol
StreamFileWrite << c;
StreamFileWrite << L"bar";
}
StreamFileWrite.close();
}
}
out.txt
包含“foo小bar”的正确做法应该是什么?
在 C++ 中向文件写入宽字符(如小)时遇到的问题通常是由字符编码和文件打开方式引起的。默认情况下,除非您显式设置区域设置,否则 std::wofstream 可能无法在 Windows 上正确处理 Unicode。
这是代码的修改版本,它适当地设置区域设置并使用正确的文件编码:
#include <fstream>
#include <locale>
#include <codecvt>
int main() {
// Set the locale to handle UTF-8
std::wofstream StreamFileWrite(L"C:\\out.txt");
// Check if the file is opened successfully
if (StreamFileWrite.is_open()) {
// Set the locale to use UTF-8
StreamFileWrite.imbue(std::locale(StreamFileWrite.getloc(), new std::codecvt_utf8<wchar_t>));
// Write wide characters to the file
StreamFileWrite << L"foo";
wchar_t c = 0x5C0F; // Unicode character 小
StreamFileWrite << c;
StreamFileWrite << L"bar";
// Close the file
StreamFileWrite.close();
} else {
// Handle file open failure
std::wcerr << L"Failed to open file for writing." << std::endl;
}
return 0;
}