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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [Решено]проблема с именами файлов(кодировкой)  (Прочитано 13249 раз)
Aleksey_Zh
Гость
« : Апрель 13, 2010, 07:48 »

Система - SDK2009.02 mingw windows статическая сборка. Делаю ftp соединение и считываю имена файлов. Английские имена отображаются корректно. Русские - абракадабра.

Чтобы избавиться от данного трабла ввел код
Код:
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QTextCodec::setCodecForTr( codec );
    QTextCodec::setCodecForCStrings( codec );
    QTextCodec::setCodecForLocale( codec );

Пытался менять кодировку на cp1251 - история та же.
Не помогло. Что делать?

З.Ы. получение списка файлов содрал из стандартного примера (\examples\network\ftp)

З.З.Ы.
Код:
void MainWindow::addToList(const QUrlInfo &urlInfo)
{
    QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
    QString OUT = codec->fromUnicode(urlInfo.name());
}
Сие шаманство тоже не привело к желаемому результату!
Щас начну в панику впадать  В замешательстве Улыбающийся

« Последнее редактирование: Апрель 14, 2010, 08:09 от Aleksey_Zh » Записан
shirushizo
Гость
« Ответ #1 : Апрель 13, 2010, 10:06 »

Попробуй вместо fileName написать tr(fileName) при выводе, хотя я не уверен что поможет.
Еще попробуй, где считываешь, fromAnsii() использовать, или кодеки на utf-8,koi8 поменяй.
Записан
p166
Гость
« Ответ #2 : Апрель 13, 2010, 10:38 »

    QTextCodec::setCodecForTr( codec );
    QTextCodec::setCodecForCStrings( codec );
    QTextCodec::setCodecForLocale( codec );
и делай через tr("...")
или tr(QString::fromUtf8(...))
Пользуюсь и в linux и в windows, проблемы с кодировкой исчезли.
Записан
crossly
Гость
« Ответ #3 : Апрель 13, 2010, 10:58 »

Цитировать
и делай через tr("...")
вы что имена файлов переводит собрались??
Записан
Aleksey_Zh
Гость
« Ответ #4 : Апрель 13, 2010, 11:04 »

QTextCodec::setCodecForTr( codec );
//    QTextCodec::setCodecForCStrings( codec );
//    QTextCodec::setCodecForLocale( codec );


Действительно так.
MainWin->trUtf8(urlInfo.name().toAscii());
Это поправило положение.
Но появилась другая проблема - теперь без tr - никуда. Если раньше можно было печатать текст и не заморачиваться - теперь его нужно обязательно tr-ить. Можно это как - то обойти?
Записан
Zmeishe
Гость
« Ответ #5 : Апрель 13, 2010, 11:23 »

Цитировать
QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
    QString OUT = codec->fromUnicode(urlInfo.name());

Похоже что ftp сервер не на Qt написан.
Тогда почему QString OUT = codec->fromUnicode(urlInfo.name());
а не QString OUT = codec->toUnicode(...);

??
Записан
BOBO4KA
Гость
« Ответ #6 : Апрель 13, 2010, 11:24 »

Код:
fileName.toLatin1()

попробуй
Записан
Aleksey_Zh
Гость
« Ответ #7 : Апрель 13, 2010, 11:37 »

toUnicode - пробовал. Сервер - filezilla. Написан на vc
toLatin1 - тоже не прошло
Записан
Zmeishe
Гость
« Ответ #8 : Апрель 13, 2010, 11:46 »

Выясни в какой кодировке сервер пересылает данные.
Это может быть кодировка операционки, под которой крутится сервер.
Тогда выясни, что там. Может это вообще CP866 ?
Потом
QTextCodec *codec=QTextCodec::codecForName( Кодировка );
QString OUT = codec->toUnicode(...);


Записан
Aleksey_Zh
Гость
« Ответ #9 : Апрель 13, 2010, 11:50 »

Вообще сервак локальный - на моей машине (с виндой). Так что кодировка по умолчанию скорее всего родная -windows-1251.
Вообще как можно точно выяснить 1. текущую кодировку 2. серверную (в которой он шлет данные)?
Записан
Zmeishe
Гость
« Ответ #10 : Апрель 13, 2010, 11:55 »

Куда выводишь имена файлов?
Где абракадабру видишь ? В виджете, в консоли, ...?
Записан
Aleksey_Zh
Гость
« Ответ #11 : Апрель 13, 2010, 12:02 »

Изначально - в QTreeWidget. Далее, для отладки стал использовать простой QString для накопления данных. - Для отображения соответственно QMessageBox.
Записан
Zmeishe
Гость
« Ответ #12 : Апрель 13, 2010, 12:06 »

Цитировать
Действительно так.
MainWin->trUtf8(urlInfo.name().toAscii());
Это поправило положение.

Похоже данные приходят в UTF-8;
codecForName("UTF-8") или QString::fromUtf8() должно помочь.
Записан
BRE
Гость
« Ответ #13 : Апрель 13, 2010, 12:09 »

2 Aleksey_Zh. Гадать не надо.  Улыбающийся
Посмотри RFC: http://tools.ietf.org/html/rfc2640
Записан
Aleksey_Zh
Гость
« Ответ #14 : Апрель 13, 2010, 13:07 »

QString::fromUtf8() должно помочь.
пробовал так QString::fromUtf8(urlInfo.name().toAscii());
не помогает.


P.S. Хотя нет, помогает. Но помогает при полностью отключенном в main кодеке.
Тогда встает вопрос - как при включенном QTextCodec (включение описано в первом сообщении) сделать рабочий код? Без tr.

P.P.S. Похоже все - таки так как хотелось не сделаешь. То, что данные приходят в UTF-8 - это определенно. А вот с дальнейшим преобразованием используя код в main - особо не порыпаешься.
« Последнее редактирование: Апрель 13, 2010, 14:23 от Aleksey_Zh » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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