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

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

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

 Я вообще не понимаю этой логики

QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr( codec );
MainWin->trUtf8(urlInfo.name().toAscii());
РАБОТАЕТ


QString::fromUtf8(urlInfo.name().toAscii());
НЕ работает

Ну и как же, вашу мать, это надо понимать?
Записан
ufna
Гость
« Ответ #16 : Апрель 13, 2010, 14:23 »

ну дак ты кодек то для чего задал? Для tr, а не QString.

Код
C++ (Qt)
// Sets right codec for russian words
   QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
   QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
Записан
Aleksey_Zh
Гость
« Ответ #17 : Апрель 13, 2010, 14:25 »

ну дак ты кодек то для чего задал? Для tr, а не QString.

Код
C++ (Qt)
// Sets right codec for russian words
   QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
   QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
А это разве не для QString?НепонимающийНепонимающийНепонимающийНепонимающийНепонимающийНепонимающийНепонимающий?
Записан
Aleksey_Zh
Гость
« Ответ #18 : Апрель 13, 2010, 14:27 »

Я вообще не понимаю этой логики

QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr( codec );
MainWin->trUtf8(urlInfo.name().toAscii());
РАБОТАЕТ


QString::fromUtf8(urlInfo.name().toAscii());
НЕ работает

Ну и как же, вашу мать, это надо понимать?

у меня такое ощущение, что задавая
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
происходит двойное перекодирование. Если не прав - поправьте.
Записан
BRE
Гость
« Ответ #19 : Апрель 13, 2010, 14:37 »

Камрады, может лучше один раз разобраться с тем, что делают эти функции, чем использовать их как магическую последовательность команд, главное кодек подобрать....  Подмигивающий
Ну столько раз уже поднималась эта тема... Вторая по популярности после: Почему на другой машине не открывается БД/не читаются картинки.
Записан
Zmeishe
Гость
« Ответ #20 : Апрель 13, 2010, 14:45 »

Причём тут кодеки?

trUtf8() и fromUtf8() предполагают, что на входе текст в "UTF-8"

trUtf8() это не tr(). Ей должно быть абсолютно пофигу какой там setCodecForTr() !

И если автор темы пишет, что trUtf8() работает, а fromUtf8() НЕ работает - то я уже не знаю чему верить.
Записан
Aleksey_Zh
Гость
« Ответ #21 : Апрель 13, 2010, 14:53 »

Причём тут кодеки?

trUtf8() и fromUtf8() предполагают, что на входе текст в "UTF-8"

trUtf8() это не tr(). Ей должно быть абсолютно пофигу какой там setCodecForTr() !

И если автор темы пишет, что trUtf8() работает, а fromUtf8() НЕ работает - то я уже не знаю чему верить.

Zmeishe, читайте внимательнее.

Цитировать
QTextCodec::setCodecForTr( codec );
//    QTextCodec::setCodecForCStrings( codec );
//    QTextCodec::setCodecForLocale( codec );


Действительно так.
MainWin->trUtf8(urlInfo.name().toAscii());
Это поправило положение.
trUtf8 работает только в том случае когда закомментировано //    QTextCodec::setCodecForCStrings( codec );
//    QTextCodec::setCodecForLocale( codec );
Записан
BRE
Гость
« Ответ #22 : Апрель 13, 2010, 14:57 »

Вот-вот, можно долго гадать...
Но все таки проще один раз разобраться, как это все работает:

Цитировать
QByteArray QString::toAscii () const

Returns an 8-bit ASCII representation of the string as a QByteArray.

If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit char; otherwise this function does the same as toLatin1().

See also fromAscii(), toLatin1(), toUtf8(), toLocal8Bit(), and QTextCodec.
Записан
Zmeishe
Гость
« Ответ #23 : Апрель 13, 2010, 15:01 »

MainWin->trUtf8(urlInfo.name().toAscii());
будет работать, когда urlInfo.name().toAscii() вернёт строку в utf8.

Вы хотите сказать что

QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr( codec );


превращает строку urlInfo.name().toAscii() в utf8 ?


Записан
BRE
Гость
« Ответ #24 : Апрель 13, 2010, 15:04 »

MainWin->trUtf8(urlInfo.name().toAscii());
будет работать, когда urlInfo.name().toAscii() вернёт строку в utf8.

Вы хотите сказать что

QTextCodec *codec=QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr( codec );


превращает строку urlInfo.name().toAscii() в utf8 ?
Это кому вопрос?

Нужно сесть и внимательно посмотреть сколько и каких преобразований строки происходит при выполнении этого кода:
Код
C++ (Qt)
MainWin->trUtf8(urlInfo.name().toAscii());

Записан
Aleksey_Zh
Гость
« Ответ #25 : Апрель 14, 2010, 08:08 »

Все, для меня проблема решена. Нужно было просто внимательно посмотреть на то, что делает toAscii. Битва самоваров закончена. Спасибо BRE!!!  Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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