Russian Qt Forum

Qt => Общие вопросы => Тема начата: Caduceus от Август 26, 2011, 11:19



Название: Как из русской QString получить корректный const char*
Отправлено: Caduceus от Август 26, 2011, 11:19
Одна библиотека требует на вход const char* - это путь до файла, а у меня путь до файла в QString
Делал раньше вот так   filename.toStdString().c_str()
Если путь до файла содержит русские буквы, то там лажа. Как сделать нормально?
toLatin1, toAscii, toUtf8  не помагают


Название: Re: Как из русской QString получить корректный const char*
Отправлено: BRE от Август 26, 2011, 11:30
Для начала стоит определиться в какой кодировке требуется получить строку. Если это венда, то скорее всего нужна CP1251.
Воспользуйся QTextCodec для конвертации.


Название: Re: Как из русской QString получить корректный const char*
Отправлено: Caduceus от Август 26, 2011, 11:33
Но заранее же не известно что в пути до файла у юзера. Хоть китайский там могту быть. А скормить на вход функции из либы надо именно const char*


Название: Re: Как из русской QString получить корректный const char*
Отправлено: ddrtn от Август 26, 2011, 11:35
Зависит от системной кодировки.
Для win-1251:
Код:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("windows-1251"));
QString str = <value>;
QByteArray ba = str.toLocal8Bit();
<function_for_const_char>(ba.data());



Название: Re: Как из русской QString получить корректный const char*
Отправлено: Пантер от Август 26, 2011, 11:38
QTextCodec * QTextCodec::codecForLocale () [static]


Название: Re: Как из русской QString получить корректный const char*
Отправлено: maint от Август 26, 2011, 11:54
я делаю следующим образом в функции
Код:
    if(strstr(curr_locale, "UTF") == NULL){
        outstr = strdup(str.toLocal8Bit());
    } else {
        outstr = strdup(str.toUtf8());
    }

где curr_locale определяется глобально один раз в начале работы программы.


Название: Re: Как из русской QString получить корректный const char*
Отправлено: Авварон от Август 26, 2011, 14:29
toLocal8Bit() ?


Название: Re: Как из русской QString получить корректный const char*
Отправлено: ритт от Август 27, 2011, 23:38
toLocal8Bit()
а ещё правильнее - QFile::decode/encode


Название: Re: Как из русской QString получить корректный const char*
Отправлено: TukiNov от Август 29, 2011, 11:15
Но заранее же не известно что в пути до файла у юзера. Хоть китайский там могту быть. А скормить на вход функции из либы надо именно const char*
Случаем либа не gistoolkit от Панорамы ? :) Если да то, то я скармливаю через toAscii().data();