std::filesystem::pathは便利である。
文字コード変換機能が内蔵されており,macOS,windowsどちらも意図どおり動作する。
以下検証コードと実行結果である。
std::filesystem::path path1 = "あ";
const unsigned char* a = (const unsigned char*)path1.string().c_str();
printf("a: %02x %02x %02x %02x\n", *a, *(a+1), *(a+2), *(a+3));
const wchar_t* b = path1.wstring().c_str();
printf("b: %02x %02x %02x %02x\n", *b, *(b+1), *(b+2), *(b+3));
std::filesystem::path path2 = L"あ";
const unsigned char* c = (const unsigned char*)path2.string().c_str();
printf("c: %02x %02x %02x %02x\n", *c, *(c+1), *(c+2), *(c+3));
const wchar_t* d = path2.wstring().c_str();
printf("d: %02x %02x %02x %02x\n", *d, *(d+1), *(d+2), *(d+3));
[Xcode15]
a: 00e3 0081 0082 0000
b: 3042 0000 0000 0000
c: 00e3 0081 0082 0000
d: 3042 0000 0000 0000
[Visual Studio 2022]
a: 0082 00a0 0000 0000
b: 3042 0000 0000 0000
c: 0082 00a0 0000 0000
d: 3042 0000 0000 0000
macOSはシステムのデフォルトがUTF8,日本語版WindowsはCP932となっているのがわかる。