一、背景
中文路径在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;
}