一、背景
中文路径在std::filesystem中使用时汇报utf8编码错误。
原因是:windows的文件系统的路径是gbk的编码。
二、解决方案
为了开发的程序通用性更好,建议统一使用utf-8宽字节的字符串表达。
代码示例:
#include <locale>std::wstring _transformString2Wstring(const std::string& s) {setlocale(LC_CTYPE, "en_US.UTF-8");const char* _Source = s.c_str();size_t len = strlen(_Source) + 1;size_t converted = 0;wchar_t* wStr = new wchar_t[len];mbstowcs_s(&converted, wStr, len, _Source, _TRUNCATE);std::wstring result(wStr);delete[] wStr;return result;
}std::filesystem::path _getPath(const std::string& p) {std::wstring wdirname = _transformString2Wstring(p);// 使用 std::filesystem 和 std::wstring 来创建目录std::filesystem::path path(wdirname);return path;
}