Руссие буквы в путях fopen() для Qt_5_3_MSVC2010

 
0
 
C++
ava
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.
Kommentare (5)
ava
maint | 18.11.2016, 16:01 #
два варианта могёт быть. Текст, имя файла,  в программе в кодировке utf-8, а в файловой системе в cp-1251. Или наоборот. 
ava
borisbn | 18.11.2016, 16:20 #
Раз программа работала в Linux'е, то она написана в Utf-8. fopen требует в win1251. У меня была схожая проблема. Решается так:

#include <QTextCodec>
#include <string>
#include <QString>

inline std::string utf8_2_win1251( const QString & str ) {
    QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" );
    if ( ! codec )
    {
        return std::string();
    }
    return codec->fromUnicode( str ).toStdString();
}

inline QString win1251_2_utf8( const std::string & str ) {
    QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" );
    if ( ! codec )
    {
        return QString();
    }
    return codec->toUnicode( str.c_str() );
}

ava
Alca | 18.11.2016, 16:20 #
А причем здесь Qt?
ava
Alexeis | 18.11.2016, 17:12 #
Цитата (Alca @  18.11.2016,  17:20 findReferencedText)
А причем здесь Qt? 


  При том, что MOC считает, что кодировка исходников совпадает с кодировкой строки, что верно только для GCC, но не для Visual Studio. Visual Studio если видит в исходниках символы в кодировке utf8 (при этом исходники с BOM), то конвертирует их в utf16, тогда как Qt считает, что там utf8. По размеру они тоже 2х байтные. Есть по меньшей мере 3 способа решения проблемы
1) Убрать BOM из исходников. Тогда VS думает, что это 1251 и не конвертирует uft8 в utf16
2) Использовать макрос QStringLiteral, насколько я понял, он превращает символы в однозначно трактуемые коды символов.
3) Использовать QOjbect::tr и кириллицу задавать только в файлах переводов.
ava
plica98 | 21.11.2016, 08:31 #
Доброе утро, уважаемые Коллеги.

Большое спасибо maint, borisbn, Alexeis за оперативные отклики, внимание и советы.
Сейчас буду разбираться. Есть над чем поработать и задуматься.

С уважением и благодарностью plica98.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  Alca   maint ava  borisbn   plica98 ava  Alexeis
advanced
Absenden