ファイルにUTF-16文字列(std::wstring_view
が対応するデータ)を出力するにはstd::ofstream
をバイナリモードで使用します。次のようなコードを準備しておくと便利だと思います。
#include <fstream> #include <filesystem> // UTF-16文字列を指定されたパスへ出力します。BOMは付加しません。 void write_utf16(std::filesystem::path path, std::wstring_view s) { std::ofstream fout(path, std::ios::binary); fout.write(std::bit_cast<const char*>(s.data()), s.size() * sizeof(wchar_t)); fout.flush(); }
std::wofstream
とstd::codecvt
を組み合わせても出力できるようですが、std::codecvt
はC++17で非推奨(参考:cpprefjp)なことに注意してください。std::codecvt
が未指定の場合、出力時にUTF-16からマルチバイト文字列へ強制変換されます。write
の代わりに<<
演算子も使えますが、長さを指定できるのはwrite
です。