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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Путь к файлу(папке) кириллицей  (Прочитано 7825 раз)
ramzay_77
Гость
« : Июль 11, 2013, 18:35 »

Здравствуйте, уважаемые форумчане!
Второй день бьюсь над удалением файлов и папок, имена которых - в кирице.
Копаю в сторону QTextCodec :

 QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
 //QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
 //QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251") );

 QString string = "Моя папочка";
 qDebug()<<string;
 qDebug()<<tr(string.toAscii());
 qDebug()<<tr(string.toUtf8());
 qDebug()<<tr(string.toLatin1());
 qDebug()<<tr(string.toLocal8Bit());

Но ничто из перечисленного (в т.ч. из закоментированного) не подходит.
Вывод  qDebug() - на рисунке.

А создание папки - без проблем :
QString NewDir = "Новая папка";
DModel->mkdir(currentIndex(),NewDir);

Что делать?
« Последнее редактирование: Июль 13, 2013, 11:12 от ramzay_77 » Записан
merke
Гость
« Ответ #1 : Июль 11, 2013, 18:39 »

Работай только с UTF-8
Записан
ramzay_77
Гость
« Ответ #2 : Июль 11, 2013, 18:45 »

Если я Вас правильно понял, то это тоже не работает:

 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
 QString string = "Моя папочка";
 qDebug()<<codec->fromUnicode(string.toUtf8());
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Июль 11, 2013, 18:54 »

1) исходники сохранять в UTF-8
2) setCodecForTr() устанавливает кодировку для tr(). тебе же нужно setCodecForCStrings()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ramzay_77
Гость
« Ответ #4 : Июль 11, 2013, 19:33 »

В кусок исходника с применением setCodecForCStrings носом не тыкнете?
Упорно не работает...
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июль 11, 2013, 19:37 »

Код:
class UTextCodec
{
public:
    static void initTextCodecs(const char *codecName)
    {
        QTextCodec *codec = QTextCodec::codecForName(codecName);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForTr(codec);
    }
};

в main.cpp:
Код:
UTextCodec::initTextCodecs("cp1251");
Записан

Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Июль 11, 2013, 20:25 »

Код
C++ (Qt)
QString str = QString::fromUtf8("Моя папочка");
qDebug("Created: %d", QDir().mkdir(str));
qDebug("Removed: %d", QDir().rmdir(str));
 

Исходники должны быть в UTF-8. И при чём тут вообще setCodecForTr()?
Записан
ramzay_77
Гость
« Ответ #7 : Июль 11, 2013, 20:32 »

Спасибо всем откликнувшимся!
Все заработало.

Alex Custov - отдельное спасибо. Благодаря Вам, пазл сложился!
Записан
ramzay_77
Гость
« Ответ #8 : Июль 13, 2013, 11:12 »

Все проблемы решились, но появилась маленькя неприятность :
при запуске отладчика в окне вывода приложения qDebug() кириллические строки выводит иероглифами...
Изменение настроек отладчика методом научного тыка положительных результатов не дало.
Можно ли эту неприятность устранить ?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Июль 13, 2013, 20:33 »

Нет. Если не ошибаюсь, то в консольку выводится в CP866.
Записан

ArchLinux x86_64 / Win10 64 bit
ramzay_77
Гость
« Ответ #10 : Июль 13, 2013, 20:35 »

Спасибо! Значит - не будем совершенствовать велосипед...
Записан
ритт
Гость
« Ответ #11 : Июль 20, 2013, 05:34 »

в консоли, из которой запускается приложение (и в которую же сыплет сообщениями): chcp 1251
при этом QTextCodec::setCodecForLocale() звать не надо (в рус-локализованной win cp1251 - дефолтовый кодек)
« Последнее редактирование: Июль 20, 2013, 05:36 от Константин » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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