Название: Перевод русского текста QString в char * Отправлено: svalkadoma от Ноябрь 04, 2010, 00:48 Добрый день всем.
Столкнулся с проблемой. Имеется функция сторонней библиотеки в которую следует передать "char *". Имеется файл на диске. Задача в том, что следует получить имя файла, затем преобразовать его в char * чтобы передать в функцию. Отражу все данные, какие могу. Мой исходный код хранится в кодировке UTF-8. В main() у меня: Код: QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) ); а в моём cpp-файле выполняется следующее: Код: QString dir("D:/МУЗА"); на первой же итерации происходит сегфолт после полной итерации. вот вывод: D:/РњРЈР—Рђ/Alexei Aigi/929/01 Алексей РђР№РіРё - Несколько возможностей использования квази-цитат.mp3 D:/????/Alexei Aigi/929/01 ??????? ???? - ????????? ???????????? ????????????? ?????-?????.mp3 D:/РњРЈР—Рђ/Alexei Aigi/929/01 Алексей РђР№РіРё - Несколько возможностей использования квази-цитат.mp3 D:/РњРЈР—Рђ/Alexei Aigi/929/01 Алексей РђР№РіРё - Несколько возможностей использования квази-цитат.mp3 TagLib: Could not open file D:/РњРЈР—Рђ/Alexei Aigi/929/01 Алексей РђР№РіРё - Несколько возможностей использования квази-цитат.mp3 последняя строка означает что библиотека не смогла открыть файл с именем из кракозябр (потому что такого нету конечно, но если кракозябры переделать в русский текст то такой файл существует) и потому случился сегфолт. Возникает вопрос: как же переделать полученный как QString путь в char * сохранив при этом русскую кодировку ? Дело происходит в Win XP. :( Также возникает второй вопрос. Существует ли тут универсальное решение, ведь если у меня имя и путь к файлу будут не на русском языке а на другом не-english-языке, при не универсальном решении придётся мучаться с каждым языком :). Благодарю за ответы, Товарищи Земляки! Название: Re: Перевод русского текста QString в char * Отправлено: ритт от Ноябрь 04, 2010, 07:20 > QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) );
с каких пор венда стала поддерживать utf-8? > на первой же итерации происходит сегфолт после полной итерации. зациклило... > вот вывод: вывод куда? > последняя строка означает что библиотека не смогла открыть файл с именем из кракозябр с каких пор венда стала поддерживать utf-8? > сохранив при этом русскую кодировку это какую-такую? ibm866? cp1251? iso-8859-5?.. русская кодировка... > Существует ли тут универсальное решение существует. > как же переделать полученный как QString путь в char * QString - это unsigned short * char * - это char * решение очевидно. нужно только ответить на вопросы выше ^ Название: Re: Перевод русского текста QString в char * Отправлено: svalkadoma от Ноябрь 04, 2010, 10:33 Цитировать > QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) ); даже не знаю что ответить, т.к. вообще никогда не задавался этим вопросом, потому что кроме той проблемы что сейчас возникла я давно пишу на qt под windows и никаких проблем с кодировками не было.с каких пор венда стала поддерживать utf-8? Цитировать > на первой же итерации происходит сегфолт после полной итерации. итерация - одноразовое выполнение всего блока операторов внутри тела цикла. соответственно после одной такой итерации программа вылетела с сегфолтом.зациклило... Цитировать > вот вывод: вывод на консоль (qDebug() как Вы знаете, всегда даёт вывод на консоль). сообщение об ошибке также выводится в консоль.вывод куда? Цитировать > последняя строка означает что библиотека не смогла открыть файл с именем из кракозябр извините, но ответ аналогичен тому что выше :)с каких пор венда стала поддерживать utf-8? Цитировать > сохранив при этом русскую кодировку такую, которая будет отображать русский язык в консоли корректно (наверное 866) либо iso)это какую-такую? ibm866? cp1251? iso-8859-5?.. русская кодировка... Добавлено: Вы действительно грамотно задаёте вопросы :). Спасибо ! :). Дело в том что я привык писать эти 3 строчки setCodec* и не обратил внимания. Действительно, закомментировав строку Код: QTextCodec::setCodecForLocale ( QTextCodec::codecForName ( "UTF-8" ) ); Код: TagLib::FileRef f(QString(dir+"/"+files.at(i).fileName()).toLocal8Bit().constData()); Название: Re: Перевод русского текста QString в char * Отправлено: kolob от Декабрь 02, 2010, 16:28 Если кому пригодиться то можно вот так сделать:
Код: QString str = "бла-бла-бла"; Мне помогло для определенной задачи. Название: Re: Перевод русского текста QString в char * Отправлено: ритт от Декабрь 08, 2010, 17:54 пффф
|