Конвертирование строки gchar в wchar_t (GTK, FreeImage)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Конвертирование строки gchar в wchar_t

Сообщение BratSinot »

Доброго времени суток!

Есть программа на 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()).
Спасибо сказали: