Есть программа на GTK, которая получает строку (GtkEntry) и FreeImage её загружает. Если в пути встречаются non ASCII символы, то в системах отличных от Windows все работает, а в Windows нужно использовать unicode-аналоги функций FreeImage (к примеру FreeImage_LoadU, заместо FreeImage_Load). Проблема в том, что там используется wchar_t и нужно как-то конвертировать исходную строку.
Если написать так:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <FreeImage.h>
int main(void) {
FreeImage_Initialise(0);
FIBITMAP *img = FreeImage_LoadU(FIF_JPEG, L"C:\\SS\\ТЕСТ\\ТЕСТ ПРОБЕЛОЫ\\y_2589245a.jpg", 0);
FreeImage_SaveU(FIF_PNG, img, L"test.png", 0);
FreeImage_DeInitialise();
return 0;
}то все работает. А ежели попробовать конвертировать:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <FreeImage.h>
int main(void) {
FreeImage_Initialise(0);
char *str = "C:\\SS\\ТЕСТ\\ТЕСТ ПРОБЕЛОЫ\\y_2589245a.jpg";
wchar_t wstr[strlen(str)];
mbstowcs(wstr, str, strlen(str)+1);
FIBITMAP *img = FreeImage_LoadU(FIF_JPEG, wstr, 0);
FreeImage_SaveU(FIF_PNG, img, L"test.png", 0);
FreeImage_DeInitialise();
return 0;
}то оно не работает, хотя конвертирует вроде правильно (проверял через wprintf).
Как правильно конвертировать? Или в glib есть функции, через которые это можно сделать? glib/GTK вообще UTF-8 используют, возможно там другой подход нужен.
Ладно, с glib/GTK проблема решается конвертацией UTF-8 строки, в строку с кодировкой системы (посредством g_locale_from_utf8()).