К сожалению, нет никакого способа сделать Unicode текущей кодовой страницей в Windows. CP_UTF7
и CP_UTF8
константы являются псевдокодовыми страницами, используемыми только в MultiByteToWideChar и , функции преобразования WideCharToMultiByte , как Ben упомянули.
Ваша проблема подобна тому из fstream классов C++. fstream конструкторы принимают [только 112] имена, делая невозможным открыть файл с истинным именем Unicode. Единственным решением, предлагаемым VC, был взлом: откройте файл отдельно и затем установите дескриптор на потоковый объект. Я боюсь, что это не опция для Вас, конечно, так как сторонняя библиотека, вероятно, не принимает дескрипторы.
единственное решение, о котором я могу думать, состоит в том, чтобы создать временный файл с именем не-Unicode, которое трудно связано с оригиналом, и используйте это в качестве параметра.
Весь Windows APIs думает в UTF-16, таким образом, Вы - более обеспеченная запись обертки вокруг Вашей библиотеки, которая преобразовывает на границах.
Достаточно странно, Windows думает, что UTF-8 является кодовой страницей в целях преобразования, таким образом, Вы используете те же API, как Вы были бы для преобразования между кодовыми страницами:
std::wstring Utf8ToUtf16(const char* u8string)
{
int wcharcount = strlen(u8string);
wchar_t *tempWstr = new wchar_t[wcharcount];
MultiByteToWideChar(CP_UTF8, 0, u8string, -1, tempWstr, wcharcount);
wstring w(tempWstr);
delete [] tempWstr;
return w;
}
И что-то вроде подобной формы для преобразования назад.