1.在mac环境下,由于mac的文件打开函数本来就支持utf8字符路径,所以可以直接传入中文字符,而不用修改第三方库代码。
2.由于windows的函数不支持utf8的字符,所以需要修改第三方库代码。
修改方法:
1.在第三方库中找到所有使用fopen的地方,如果这些文件都引用了同一个文件,可以在那个文件中添加替换fopen()的宏,代码如下:
.h
2.由于windows的函数不支持utf8的字符,所以需要修改第三方库代码。
修改方法:
1.在第三方库中找到所有使用fopen的地方,如果这些文件都引用了同一个文件,可以在那个文件中添加替换fopen()的宏,代码如下:
.h
#ifdef _WIN32
std::wstring Utf8ToUnicode(const char* buf);
#define fopen(a, b) _wfopen(Utf8ToUnicode(a).c_str(), Utf8ToUnicode(b).c_str())
#endif
.cpp
#ifdef _WIN32
#include <Windows.h>
#include <vector>
std::wstring Utf8ToUnicode(const char* buf)
{
int len = ::MultiByteToWideChar(CP_UTF8, 0, buf, -1, NULL, 0);
if (len == 0)
{
return L"";
}
std::vector<wchar_t> unicode(len);
::MultiByteToWideChar(CP_UTF8, 0, buf, -1, &unicode[0], len);
return &unicode[0];
}
#endif
windows字符转换函数可参考:http://www.cnblogs.com/gakusei/articles/1585211.html