![]() |
|
![]() ![]() ![]() |
|
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Доброе.
Пару дней назад столкнулся с казалось бы банальной проблемой, которую, правда, упорно решал два дня. Суть была такова. QFile, ровно как и QDir не находили (если передавать имя директории строкой в setPath к примеру) папок, которые реально существовали на диске. Первое что пришло в голову, что "мешаюся" русские буквы. Не правда. Это отрабатывалось при toLocal8bit или toLatin. Второе предполодение - пробелы. Тоже не правда. Оказалась причина в том, что в программе генерировалась строка x0X, где вместо X вставлялась цифра через QSring().setNum. В результате вот этой папки программа и не видела. НО. если я занова переименовывал папку в системе (Win XP Sp3), но она становилась видимой. В общем, после долгих мутарств по мануалам и инету проблему решил следующим образом:
и использованием toLocal8Bit. Вопрос собственно вот в чем. В какой кодировке в винде создаются имена папок и файлов? Понятно, что UTF8 тут отменяется совершенно. Второй момент, уже непосредственно к кути. Проясните, правильно ли я понимаю, что setCodecForCStrings устанавливает кодек для ВСЕХ строк которые я юзаю как объекты QString? И чем тогда он отличается от setCodecForLocale? Едем дальше в Волгоград ![]() Спасибо. |
|||
|
||||
anil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 3.5.2008 Репутация: 0 Всего: 0 |
Имена папок в винде создаются в вин-1251, просто QString об этом не знает и tr, from(to)Local8Bit, toLatin etc по опыту не очень помогают) так что кодировку чаще всего приходится сообщать объекту QString используя TextCodec.
setCodecForCStrings действительно устанавливает кодек для всех QString, const char * и QByteArray, которые его видят. Если нужно, можно, как и в случае с "неработающим" tr, установить "родную" кодировку в main.cpp. setCodecForTr делает это соответственно для tr. setCodecForLocale как утверждает источник применяется в приложениях, которые сами устанавливают механизм применения локали. кстати, по поводу переносимости на разные локали - вот что рекомендуют сами тролли. Это сообщение отредактировал(а) anil - 18.8.2009, 21:31 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |