| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Руссие буквы в путях fopen() для Qt_5_3_MSVC2010 |
| Автор: plica98 18.11.2016, 15:06 |
| Добрый день уважаемые Qt-шники. Приложение было написано под Linux и прекрасно работало, пока его не перенесли в Windows 7. Собственно и под Windows 7 все нормально работает, пока не используешь русские буквы в пути. Приложение собрано в Qt_5_3_MSVC2010. Приложение скачивает файлы с удаленной машины и размещает их в папке с определенным именем. Так вот, если путь к этой папке не содержит русских букв, то все нормально. То есть, путь: PREFIX = "c:/new box/" - все нормально, путь: PREFIX = "c:/новая папка/" - не воспринимается. sprintf(l_buf,"%s%s",PREFIX,u); opis = fopen(l_buf,"wb"); Может кто-нибудь уже сталкивался с этой проблемой? Буду крайне признателен за помощь. С уважением plica98. |
| Автор: maint 18.11.2016, 16:01 |
| два варианта могёт быть. Текст, имя файла, в программе в кодировке utf-8, а в файловой системе в cp-1251. Или наоборот. |
| Автор: borisbn 18.11.2016, 16:20 | ||
Раз программа работала в Linux'е, то она написана в Utf-8. fopen требует в win1251. У меня была схожая проблема. Решается так:
|
| Автор: Alca 18.11.2016, 16:20 |
| А причем здесь Qt? |
| Автор: Alexeis 18.11.2016, 17:12 |
При том, что MOC считает, что кодировка исходников совпадает с кодировкой строки, что верно только для GCC, но не для Visual Studio. Visual Studio если видит в исходниках символы в кодировке utf8 (при этом исходники с BOM), то конвертирует их в utf16, тогда как Qt считает, что там utf8. По размеру они тоже 2х байтные. Есть по меньшей мере 3 способа решения проблемы 1) Убрать BOM из исходников. Тогда VS думает, что это 1251 и не конвертирует uft8 в utf16 2) Использовать макрос QStringLiteral, насколько я понял, он превращает символы в однозначно трактуемые коды символов. 3) Использовать QOjbect::tr и кириллицу задавать только в файлах переводов. |
| Автор: plica98 21.11.2016, 08:31 |
| Доброе утро, уважаемые Коллеги. Большое спасибо maint, borisbn, Alexeis за оперативные отклики, внимание и советы. Сейчас буду разбираться. Есть над чем поработать и задуматься. С уважением и благодарностью plica98. |