Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: 24pm от Март 28, 2009, 15:38



Название: QFile::copy() - проблема с русскими именами [РЕШЕНО]
Отправлено: 24pm от Март 28, 2009, 15:38
QFile::copy(fileName, newFileName) отрабатывает нормально если в пути нет русских букв!
Qt 4.5, Windows XP.
Подскажите куда смотреть, пожалуйста!



Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: igor_bogomolov от Март 28, 2009, 16:06
Смотреть в сторону QTextCodec.

Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));
QFile file(tr("..."));
bool ok = file.copy(tr("......"));


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: 24pm от Апрель 07, 2009, 02:23
Что-то не помогает. Пробовал и
Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));
QString fnFrom = tr( qPrintable(fullFN) );
QString fnTo = tr( qPrintable(newFN) );
if ( QFile::copy(fnFrom, fnTo) ) {...
 
И явно
Код
C++ (Qt)
QString fnFrom = tr("D:/Русский/test.log");
QString fnTo = tr("D:/test.log");
 
Куда ещё глянуть?


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: igor_bogomolov от Апрель 07, 2009, 08:41
Все туда же. Читайте описание класса QTextCodec. То что я написал, это всего лишь пример. Установите требуемую кодировку. Скорее всего "Windows - 1251".
И пользуемся поиском.


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: lit-uriy от Апрель 07, 2009, 10:03
2 24pm,
Для случая когда ты строковую константу оборачиваешь в функцию tr() кодек ставь такой же, какая кодировка у тебя в файле с исходником.

А переменные в функцию tr() оборачивать незачем.


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: 24pm от Апрель 07, 2009, 11:05
Описание QTextCodec читал, там сказано, что кодировка "System" принимает значение системной кодировки (в моём случает windows-1251).
Кодировка исходников UTF-8. Если переменные не заворачивать в tr(), то копирование не работает.
Имеет ли смысл заменить "System" на UTF-8? Попробую...


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: lit-uriy от Апрель 07, 2009, 11:08
2 24pm, "Если переменные не заворачивать в tr(), то копирование не работает."
глянь тему: QProcess не открывает русские файлы (http://www.prog.org.ru/index.php?topic=9109)
в плане использования переменной содержащей путь к файлу


Название: Re: QFile::copy() - проблема с русскими именами
Отправлено: 24pm от Апрель 07, 2009, 16:38
Вариант
Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QFile f(tr("D:/Русский/text.txt"));
bool ok = f.copy(tr("D:/newfile.txt"));
работает, но не могу добиться работы, если имя файла в переменной. Пробовал
Код
C++ (Qt)
QFile f(fnFrom.toLocal8Bit());
QFile f(fnFrom.toLocal8Bit().constData());
 
Если указываю
Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QString fnFrom = tr( qPrintable(fullFN) );
и сохраняю переменную в файл, то туда она записывается в кодировке windows-1251, но копировать всё равно не хочет.
Что ещё можно предпринять?

P.S. ссылку на QProcess я прочесть успел (там советовали использовать toLocal8Bit()), но сейчас она не действует.


Название: Re: QFile::copy() - проблема с русскими именами [РЕШЕНО]
Отправлено: 24pm от Апрель 09, 2009, 03:21
Итак, рабочий код:
Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QString fnFrom = tr( qPrintable(fullFN) );
QString fnTo = tr( qPrintable(imgNewFN) );
if ( QFile::copy(fnFrom, fnTo) ) {
...
 
Кодировка исходников utf-8, системная windows-1251.
Однако, код не хотел работать из-за того, что один из подключаемых файлов был в кодировке windows-1251, что удалось обнаружить не сразу!

Большое спасибо всем отозвавшимся!