Russian Qt Forum
Октябрь 01, 2024, 02:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как из русской QString получить корректный const char*  (Прочитано 5654 раз)
Caduceus
Гость
« : Август 26, 2011, 11:19 »

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

Для начала стоит определиться в какой кодировке требуется получить строку. Если это венда, то скорее всего нужна CP1251.
Воспользуйся QTextCodec для конвертации.
Записан
Caduceus
Гость
« Ответ #2 : Август 26, 2011, 11:33 »

Но заранее же не известно что в пути до файла у юзера. Хоть китайский там могту быть. А скормить на вход функции из либы надо именно const char*
Записан
ddrtn
Гость
« Ответ #3 : Август 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());

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Август 26, 2011, 11:38 »

QTextCodec * QTextCodec::codecForLocale () [static]
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
maint
Гость
« Ответ #5 : Август 26, 2011, 11:54 »

я делаю следующим образом в функции
Код:
    if(strstr(curr_locale, "UTF") == NULL){
        outstr = strdup(str.toLocal8Bit());
    } else {
        outstr = strdup(str.toUtf8());
    }

где curr_locale определяется глобально один раз в начале работы программы.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Август 26, 2011, 14:29 »

toLocal8Bit() ?
Записан
ритт
Гость
« Ответ #7 : Август 27, 2011, 23:38 »

toLocal8Bit()
а ещё правильнее - QFile::decode/encode
Записан
TukiNov
Гость
« Ответ #8 : Август 29, 2011, 11:15 »

Но заранее же не известно что в пути до файла у юзера. Хоть китайский там могту быть. А скормить на вход функции из либы надо именно const char*
Случаем либа не gistoolkit от Панорамы ? Улыбающийся Если да то, то я скармливаю через toAscii().data();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.