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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Чтение с файла  (Прочитано 8198 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #15 : Ноябрь 28, 2016, 15:38 »

текстовый в какой кодировке? Ты можешь этот файл приложить?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #16 : Ноябрь 28, 2016, 16:06 »

текстовый в какой кодировке? Ты можешь этот файл приложить?
Да, конечно
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #17 : Ноябрь 28, 2016, 16:11 »

Это 16й UTF, там половина байт нули.
« Последнее редактирование: Ноябрь 28, 2016, 16:13 от Авварон » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #18 : Ноябрь 28, 2016, 16:52 »

Это 16й UTF, там половина байт нули.

Спасибо Улыбающийся
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #19 : Ноябрь 28, 2016, 17:30 »

Только я вот сделал так и опять не пашет В замешательстве
Код
C++ (Qt)
bool MainWindow::parserFile(QString path)
{
   qDebug()<<"path = "<<path;
   QFile pFile(path);
   QByteArray baLine;
   if(pFile.exists()){
       if(!pFile.open(QIODevice::ReadOnly)){
           qCritical()<<"file not open";
           return false;
       }
       else{
           while(!pFile.atEnd()){
               baLine = pFile.readLine();
               qDebug()<<"line size = "<<baLine.size();
               QTextCodec *codec = QTextCodec::codecForName("UTF-16");
               QString str = codec->toUnicode(baLine.data());
               str.append(baLine);
               qDebug()<<"str = "<<str;
               str.clear();
               baLine.clear();
           }
           pFile.close();
           return true;
       }
   qCritical()<<"file not exists load file";    
   return false;
}
 
Строки в консоле пустые
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #20 : Ноябрь 28, 2016, 18:20 »

Код:
-                QString str = codec->toUnicode(baLine.data());
+                QString str = codec->toUnicode(baLine);

Угадайте почему.
Upd:
Код:
-    if(!pFile.open(QIODevice::ReadOnly)){
+    if(!pFile.open(QIODevice::ReadOnly | QIODevice::Text)){
(это выкосит \r)

И это ещё не всё
« Последнее редактирование: Ноябрь 28, 2016, 18:28 от Авварон » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #21 : Ноябрь 28, 2016, 18:35 »

Код:
-                QString str = codec->toUnicode(baLine.data());
+                QString str = codec->toUnicode(baLine);

Угадайте почему.
Upd:
Код:
-    if(!pFile.open(QIODevice::ReadOnly)){
+    if(!pFile.open(QIODevice::ReadOnly | QIODevice::Text)){
(это выкосит \r)

И это ещё не всё


 Шокированный и что же еще
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #22 : Ноябрь 28, 2016, 18:45 »

Код:
#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString path = "/home/abbapoh/Загрузки/Base_triton.txt";

    qDebug()<<"path = "<<path;
    QFile pFile(path);
    if(pFile.exists()){
        if(!pFile.open(QIODevice::ReadOnly | QIODevice::Text)){
//        if(!pFile.open(QIODevice::ReadOnly)){
            qCritical()<<"file not open";
            return false;
        }
        else{
            QByteArray baLine = pFile.readAll();
            // если не хочется юзать кодек
            //                QString str((QChar*)baLine.data(), baLine.size() / 2);
            QTextCodec *codec = QTextCodec::codecForName("UTF-16");
            QString str = codec->toUnicode(baLine);
            qDebug() << str;
            pFile.close();
            return true;
        }
    qCritical()<<"file not exists load file";
    return false;
    }

    return a.exec();
}

Почему глючит readLine я понять не смог.
Была попытка читать блоками по 256 байт, но текст содержит китайщину, а значит там есть суррогатные пары, которые интерпретируются неверно, если конец блока попадает в середину пары.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #23 : Декабрь 08, 2016, 12:11 »

Предполагаю, что вы пытаетесь декодировать 1 байт из utf-16 в utf-8, но utf-16 должен содержать 2 байта на символ.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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