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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt5 и setCodecForCStrings  (Прочитано 21129 раз)
nachinaushij
Гость
« : Январь 06, 2013, 13:52 »

Кто-нибудь знает, каким образом теперь решается проблема с кодировкой данных, возвращаемых функциями? В данном случае меня интересует QDir::entryList(), которая используется в примере FindFiles. Ни в какую не хочет перебирать файло в папке с русским названием.
Записан
Bepec
Гость
« Ответ #1 : Январь 06, 2013, 14:02 »

Видимо так же как и в 4.7.2. Возвращает UTF8 QString.

Записан
nachinaushij
Гость
« Ответ #2 : Январь 06, 2013, 14:24 »

Вот этот же код, в 4.8 работает.
Код
C++ (Qt)
   currentDir = QDir(path);
   QStringList files;
   if (fileName.isEmpty())
       fileName = "*";
   files = currentDir.entryList(QStringList(fileName),
                                QDir::Files | QDir::NoSymLinks);

Но при условии, что в main.cpp есть строки:

Код
C++ (Qt)
   QTextCodec* codec = QTextCodec::codecForName("utf8");
   QTextCodec::setCodecForCStrings(codec);

В Qt 5 функция setCodecForCStrings выпилена. А без неё, вышеприведённый кусок кода, не работает, если path = /home/user/блаблабла
Записан
Bepec
Гость
« Ответ #3 : Январь 06, 2013, 14:39 »

Задавай строку в UTF8 в tr.

Это не проблема функции, это проблема того, что ты передаёшь херню в path.
Записан
nachinaushij
Гость
« Ответ #4 : Январь 06, 2013, 14:57 »

Упс ... Сорри! Всё работает. Вот это я ступил ... Просто рекурсию надо добавить, а я жду выхлопа ...

Тему можно смело удалить. Ибо ерунда полная.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 871


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Февраль 22, 2013, 10:23 »

И все же, интересно, если в исходниках (не в utf-8) есть строковые константы
Код:
QString blabla = "блаблабла";
как быть без setCodecForCStrings? Пока кроме чего-то подобного
Код:
QString cvt(const char* str){
    return QTextCodec::codecForName("Кодировка исходников")->toUnicode(str);
}
ничего не приходит в голову. А судя по реакции джедаев, это не кошерно..
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
carrygun
Гость
« Ответ #6 : Февраль 22, 2013, 10:34 »

Сохранять исходники в Utf-8.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #7 : Февраль 22, 2013, 10:59 »

Вот это не кошерно:
И все же, интересно, если в исходниках (не в utf-8) есть строковые константы
Код:
QString blabla = "блаблабла";
Строковых констант на кириллице быть не должно. Кошерно вот так:
Код:
QString blabla = tr("blablabla");
с последующим переводом в linguist на любой язык.
Записан

Пока сам не сделаешь...
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 871


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #8 : Февраль 22, 2013, 11:31 »

Сохранять исходники в Utf-8.
Это понятно, мешает только одно - исходники я использую в проектах Qt и C++ Builder. Последний utf-8 не понимает.

Строковых констант на кириллице быть не должно. Кошерно вот так:
Код:
QString blabla = tr("blablabla");
с последующим переводом в linguist на любой язык.
Этот совет здесь давали 100500 раз, можно было и не повторяться - а то разбудите джедаев  Улыбающийся Как вы через тр прогоните, к примеру, такой текст шаблона для текстовой формы:
Код:
// шаблоны
const QByteArray TMPL_ED101=
"                                                                            \r\n"
"Порядковый номер                    Дата составления                        \r\n"
"электронного документа <EDNo>       электронного документа <EDDate  >       \r\n"
"                                                                            \r\n"
"Уникальный                                                                  \r\n"
"идентификатор составителя <EDAuthor>                                        \r\n"
"                                                <FileDateCaption         >  \r\n"
"                                                         <FileDate>         \r\n"
"    <#62      >                 <#71      >                       --------- \r\n"
"-------------------         -------------------                  | 0401060 |\r\n"
"Поступ.в банк плат.         Списано со сч.плат.                   --------- \r\n"
"                                                                       ---- \r\n"
"ПЛАТЕЖНОЕ ПОРУЧЕНИЕ № <#3,3>       <#4       >        <#5       >        | <#101,2> |\r\n"
"                            -----------------   -----------------      ---- \r\n"
"                                   Дата            Вид платежа              \r\n"
"Сумма    |<#6                                                              >\r\n"
"прописью |                                                                  \r\n"
"         |                                                                  \r\n"
"----------------------------------------------------------------------------\r\n"
"ИНН <#60        >  |КПП <#102   >      | Сумма |<#7                >        \r\n"
"---------------------------------------|       |                            \r\n"
"<#8                                   >|       |                            \r\n"
"                                       |------------------------------------\r\n"
"                                       | Сч.№  |<#9                >        \r\n"
"                                       |       |                            \r\n"
"                                       |       |                            \r\n"
"Плательщик                             |       |                            \r\n"
"-----------------------------------------------|                            \r\n"
"<#10                                  >| БИК   |<#11    >                   \r\n"
"                                       |-------|                            \r\n"
"Банк плательщика                       | Сч.№  |<#12               >        \r\n"
"----------------------------------------------------------------------------\r\n"
"<#13                                  >| БИК   |<#14    >                   \r\n"
"                                       |-------|                            \r\n"
"Банк получателя                        | Сч.№  |<#15               >        \r\n"
"-----------------------------------------------|                            \r\n"
"ИНН <#61       >   |КПП <#103   >      | Сч.№  |<#17               >        \r\n"
"---------------------------------------|       |                            \r\n"
"<#16                                  >|------------------------------------\r\n"
"                                       |Вид оп.|<#18,2>    |Срок плат.|          \r\n"
"                                       |-------|      |----------|          \r\n"
"                                       |Наз.пл.|      |Очер.плат.|<#21,1>         \r\n"
"                                       |-------|      |----------|          \r\n"
"Получатель                             |Код    |      |Рез. поле |          \r\n"
"----------------------------------------------------------------------------\r\n"
"<#104              >|<#105     >|<#106,2>|<#107    >|<#108         >|<#109    >|<#110,2>\r\n"
"----------------------------------------------------------------------------\r\n"
"<#24                                                                       >\r\n"
"                                                                            \r\n"
"                                                                            \r\n"
"                                                                            \r\n"
"                                                                            \r\n"
"Назначение платежа                                                          \r\n"
"----------------------------------------------------------------------------\r\n"
"                             Подписи                      Отметки банка     \r\n"
"                                                                            \r\n"
"                                                                            \r\n"
"          М.П.                                                              \r\n"
"                                                                            \r\n";
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
carrygun
Гость
« Ответ #9 : Февраль 22, 2013, 11:42 »

Я бы держал во внешних файлах/бд в зависимости от задачи, а не зашивал в приложение. Этож кошмар какойто. Из того же файла текстстримом читай как тебе надо.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #10 : Февраль 22, 2013, 12:17 »

Действительно, джедаев лучше не будить. Если они такое увидят, то больше не смогут спокойно спать.

Я бы держал во внешних файлах/бд в зависимости от задачи, а не зашивал в приложение.

Вы что?! А если понадобится одну букву в форме изменить? Это ж можно будет только текстовый файл/бд поправить. А как же перекомпилировать приложение? А пересобрать дистрибутив? А распространить всем, кто им пользуется и переустановить? За что тогда программисты будут зарплату получать? Улыбающийся
Записан

Пока сам не сделаешь...
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 871


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #11 : Февраль 22, 2013, 12:32 »

Я бы держал во внешних файлах/бд в зависимости от задачи, а не зашивал в приложение. Этож кошмар какойто. Из того же файла текстстримом читай как тебе надо.
Хм.. Этот текст за последние 12 лет, если не ошибаюсь, менялся пару раз. Остальные 59 шаблонов меняются либо синхронно с программой, либо не меняются вовсе. Для пользователя программы давать возможность лезть в шаблоны нет необходимости, более того, вредно. Чего ради городить огород с внешними файлами/бд?
Да и не в них дело-то. Примеры можно привести и другие, когда перевод с помощью тр невозможен.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
carrygun
Гость
« Ответ #12 : Февраль 22, 2013, 12:54 »

Я бы держал во внешних файлах/бд в зависимости от задачи, а не зашивал в приложение. Этож кошмар какойто. Из того же файла текстстримом читай как тебе надо.
Хм.. Этот текст за последние 12 лет, если не ошибаюсь, менялся пару раз. Остальные 59 шаблонов меняются либо синхронно с программой, либо не меняются вовсе. Для пользователя программы давать возможность лезть в шаблоны нет необходимости, более того, вредно. Чего ради городить огород с внешними файлами/бд?
Да и не в них дело-то. Примеры можно привести и другие, когда перевод с помощью тр невозможен.


Я ничего не отрицаю про tr. Но в случае с шаблоном ситуации разные бывают. Вот 12 лет не менялось, а теперь вдруг начнет меняться? А что если часто меняться? А если сырцы про**али? Да та же проблема с кодировкой, 12 лет назад не в Utf могли писать. Могут быть тысячи всяких дурацких вариантов из-за которых придется пересобирать приложение, потому что изменился шаблон.

Ну вообще кто как хочет - тот так кодит. Я просто сказал как сделал бы.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Февраль 23, 2013, 17:07 »

>>Этож кошмар какойто
Именно.
Вообще я всякое предполагал об авторах около банковско-бухгалтерских программ, но, блин, такое Г мне в голову не пришло.
Записан

Юра.
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 871


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #14 : Февраль 23, 2013, 18:27 »

такое Г мне в голову не пришло.
Просил же не будить миротворцев... Пользы - ноль.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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