У меня есть строка в кодировке KOI8-R, она передается как argv, поэтому изначально это объект char *. К сожалению, использование этой устаревшей кодировки не поможет. Системным языком является KOI8-R, и исходный код также находится в этой кодировке.Создание QFile с именем, отличным от unicode
Строка - это путь к файлу, в котором некоторые из каталогов имеют имена в KOI8-R. Мне нужно открыть файл для записи с помощью QFile. Однако open() всегда возвращает false независимо от того, что я пытаюсь сделать.
Мне нужно преобразовать путь в QString, чтобы передать его конструктору QFile, однако, прямое преобразование, QString :: fromLocal8Bit() и QFile :: decodeName(), похоже, не помогают.
char* filename; // This is a KOI8-R string
QFile f(QString::fromLocal8Bit(filename));
// QFile f(QFile::decodeName(filename)) doesn't work too
f.open(QIODevice::WriteOnly | QIODevice::Text); // returns false
Единственный способ, которым я сделал это работа была с помощью ofstream объектов из STL, передавая символ * в ofstream конструктор работает отлично, однако, использование QFile гораздо предпочтительнее, так как приложение в QT.
Быстрый вопрос ... Вы уверены, что определенный путь существует? Если вы используете QFile, тогда каталог, в котором вы хотите создать файл, ДОЛЖЕН существовать –
Также что говорит об ошибкеString() в QFile? –
Да, проблема где-то с кодировкой. Я изменил код, чтобы он создавал файл с не-unicode именем в текущем каталоге (имя файла жестко запрограммировано), а символы не-Unicode просто исчезают из имени: в коде и файле, который был «test1.txt» был вызван просто «1.txt». В имени каталога отсутствовала часть, отличная от юникода, что делает путь несуществующим. – Daniel