Проблема со считыванием русских символов из текстового файла
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 29.09.22 14:08
Оценка: -1
Я работаю с Qt Creator 4.12.2 .

Есть текстовой файл myfile.txt, содержащий русские слова и вещественные числа.
При чтении информации из этого файла:

char  s[256], sprev[256], sname[20], sX[20], sY[20], sZ[20];
FILE *f;

//...

strcpy(sprev,"");
f = fopen("myfile.txt","rt");
if (f!=NULL)
{
    fgets(s,256,f); // считывание заголовка
    fgets(s,256,f); // считывание пустой строки
    while (!feof(f))
    {
        fgets(s,256,f);
        if (strcmp(s,sprev)!=0)
        {
            sscanf(s,"%s %s %s %s",sname,sX,sY,sZ); // sname--русское слово, sX, sY, sZ содержат вещественные числа
            // обработка строк sname, sX, SY, sZ;
            strcpy(sprev,s);
        }
    }
    fclose(f);
}


считывается строка s, в которой вместо русских символов (то, чему соответствует sname) находится какая-то абракадабра. При этом вещественные значения в sX, sY и sZ считываются правильно.

В чём причина этого? Как исправить эту ошибку?
1613 г. = 2024 г.
Re: Проблема со считыванием русских символов из текстового файла
От: SаNNy Россия  
Дата: 29.09.22 14:11
Оценка: +2
Здравствуйте, RussianFellow, Вы писали:

RF>
RF>char  s[256], sprev[256], sname[20], sX[20], sY[20], sZ[20];
RF>FILE *f;

RF>//...

RF>strcpy(sprev,"");
RF>f = fopen("myfile.txt","rt");
RF>if (f!=NULL)
RF>{
RF>    fgets(s,256,f); // считывание заголовка
RF>    fgets(s,256,f); // считывание пустой строки
RF>    while (!feof(f))
RF>    {
RF>        fgets(s,256,f);
RF>        if (strcmp(s,sprev)!=0)
RF>        {
RF>            sscanf(s,"%s %s %s %s",sname,sX,sY,sZ); // sname--русское слово, sX, sY, sZ содержат вещественные числа
RF>            // обработка строк sname, sX, SY, sZ;
RF>            strcpy(sprev,s);
RF>        }
RF>    }
RF>    fclose(f);
RF>}
RF>


Тут с какого боку Qt? Почему не используется QFile и QString?
Re: Проблема со считыванием русских символов из текстового файла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.09.22 14:17
Оценка: +3 :))
Здравствуйте, RussianFellow, Вы писали:

RF>считывается строка s, в которой вместо русских символов (то, чему соответствует sname) находится какая-то абракадабра. При этом вещественные значения в sX, sY и sZ считываются правильно.


RF>В чём причина этого? Как исправить эту ошибку?


Почитай что-нибудь про кодировки текста
Маньяк Робокряк колесит по городу
Re[2]: Проблема со считыванием русских символов из текстового файла
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 29.09.22 17:22
Оценка: -1
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, RussianFellow, Вы писали:


RF>>считывается строка s, в которой вместо русских символов (то, чему соответствует sname) находится какая-то абракадабра. При этом вещественные значения в sX, sY и sZ считываются правильно.


RF>>В чём причина этого? Как исправить эту ошибку?


M>Почитай что-нибудь про кодировки текста


И что? Какую кодировку текстового файла мне надо поставить — ANSI, UTF-8 или какую-то другую?
1613 г. = 2024 г.
Re[3]: Проблема со считыванием русских символов из текстового файла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.09.22 17:37
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>>>считывается строка s, в которой вместо русских символов (то, чему соответствует sname) находится какая-то абракадабра. При этом вещественные значения в sX, sY и sZ считываются правильно.


RF>>>В чём причина этого? Как исправить эту ошибку?


M>>Почитай что-нибудь про кодировки текста


RF>И что? Какую кодировку текстового файла мне надо поставить — ANSI, UTF-8 или какую-то другую?



Это зависит от того, какая абракадабра. Опытный разработчик по виду абракадабры безошибочно угадывает кодировку. Менее опытный открывает файл в какой-нибудь программе, которая сама умеет определять кодировку, например Notepad++, и смотрит, какая определилась. Джун перебирает все известные кодировки, и смотрит, когда начнёт отображаться правильно. Тебе, я думаю, достаточно попробовать OEM (cp866) и ANSI (cp1251). Был бы UTF-8 — скорее всего, заработало бы сразу (если ты потом в кути закидываешь).
Маньяк Робокряк колесит по городу
Re[4]: Проблема со считыванием русских символов из текстового файла
От: K13 http://akvis.com
Дата: 30.09.22 03:17
Оценка:
RF>>И что? Какую кодировку текстового файла мне надо поставить — ANSI, UTF-8 или какую-то другую?
M>Это зависит от того, какая абракадабра. Опытный разработчик по виду абракадабры безошибочно угадывает кодировку. Менее опытный открывает файл в какой-нибудь программе, которая сама умеет определять кодировку, например Notepad++, и смотрит, какая определилась. Джун перебирает все известные кодировки, и смотрит, когда начнёт отображаться правильно. Тебе, я думаю, достаточно попробовать OEM (cp866) и ANSI (cp1251). Был бы UTF-8 — скорее всего, заработало бы сразу (если ты потом в кути закидываешь).

Еще вопрос, как именно он результат смотрит.
Если в консоли, то нужно для вывода в кодировку консоли переводить -- на русской винде там обычно 866, когда в системе 1251.
Re[5]: Проблема со считыванием русских символов из текстового файла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.09.22 05:57
Оценка:
Здравствуйте, K13, Вы писали:

K13>Еще вопрос, как именно он результат смотрит.

K13>Если в консоли, то нужно для вывода в кодировку консоли переводить -- на русской винде там обычно 866, когда в системе 1251.

Это вопрос со звездочкой, я оставил на сладкое
Маньяк Робокряк колесит по городу
Re[4]: Проблема со считыванием русских символов из текстового файла
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 30.09.22 12:28
Оценка:
Здравствуйте, Marty, Вы писали:

M>Это зависит от того, какая абракадабра. Опытный разработчик по виду абракадабры безошибочно угадывает кодировку. Менее опытный открывает файл в какой-нибудь программе, которая сама умеет определять кодировку, например Notepad++, и смотрит, какая определилась. Джун перебирает все известные кодировки, и смотрит, когда начнёт отображаться правильно. Тебе, я думаю, достаточно попробовать OEM (cp866) и ANSI (cp1251). Был бы UTF-8 — скорее всего, заработало бы сразу (если ты потом в кути закидываешь).


Если при просмотре в Блокноте (Notepad) указана кодировка ANSI, то какой функцией перекодирования мне нужно пользоваться?
1613 г. = 2024 г.
Re[5]: Проблема со считыванием русских символов из текстового файла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.09.22 12:32
Оценка:
Здравствуйте, RussianFellow, Вы писали:

M>>Это зависит от того, какая абракадабра. Опытный разработчик по виду абракадабры безошибочно угадывает кодировку. Менее опытный открывает файл в какой-нибудь программе, которая сама умеет определять кодировку, например Notepad++, и смотрит, какая определилась. Джун перебирает все известные кодировки, и смотрит, когда начнёт отображаться правильно. Тебе, я думаю, достаточно попробовать OEM (cp866) и ANSI (cp1251). Был бы UTF-8 — скорее всего, заработало бы сразу (если ты потом в кути закидываешь).


RF>Если при просмотре в Блокноте (Notepad) указана кодировка ANSI, то какой функцией перекодирования мне нужно пользоваться?


Любой доступной. Я понятия не имею, как ты отображаешь то, что прочитал
Маньяк Робокряк колесит по городу
Re[5]: Проблема со считыванием русских символов из текстового файла
От: Bill Baklushi СССР  
Дата: 30.09.22 12:34
Оценка:
RussianFellow:

RF>Если при просмотре в Блокноте (Notepad) указана кодировка ANSI, то какой функцией перекодирования мне нужно пользоваться?

Тебе же сказали notepad++. Простой notepad не умеет менять кодировку.
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re: Проблема со считыванием русских символов из текстового ф
От: qaz77  
Дата: 30.09.22 12:44
Оценка:
Здравствуйте, RussianFellow, Вы писали:
RF>считывается строка s, в которой вместо русских символов (то, чему соответствует sname) находится какая-то абракадабра.

Где смотришь эту абракадабру? В watch QT Designer?
Если у тебя файл в ANSI aka Windows cp1251, а нужно utf-8, то в винде надо конвертировать через WCHAR.
Сначала MultiByteToWideChar с CP_ACP (или явно 1251), а потом WideCharToMultiByte с CP_UTF8.
Отредактировано 30.09.2022 12:48 qaz77 . Предыдущая версия .
Re[2]: Проблема со считыванием русских символов из текстового ф
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.09.22 12:56
Оценка: 2 (1)
Здравствуйте, qaz77, Вы писали:

Q>Где смотришь эту абракадабру? В watch QT Designer?

Q>Если у тебя файл в ANSI aka Windows cp1251, а нужно utf-8, то в винде надо конвертировать через WCHAR.
Q>Сначала MultiByteToWideChar с CP_ACP (или явно 1251), а потом WideCharToMultiByte с CP_UTF8.

Если он использует Qt, то нафига виндовые функции? У QString есть что-то типа fromAnsi или какк-то так
Маньяк Робокряк колесит по городу
Re[3]: Проблема со считыванием русских символов из текстового ф
От: qaz77  
Дата: 30.09.22 12:59
Оценка:
Здравствуйте, Marty, Вы писали:
M>Если он использует Qt, то нафига виндовые функции? У QString есть что-то типа fromAnsi или какк-то так

Спасибо за уточнение.
Я не работал с Qt. Написал из общих соображений.
Re: Проблема со считыванием русских символов из текстового файла
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 03.10.22 07:01
Оценка:
Проблема решена:

QString  myString;
string  stdstr;

// ...

myString = QString::fromLocal8Bit(s);
stdstr = myString.toStdString();
strcpy(s,stdstr.c_str());
sscanf(s,"%s %s %s %s",sname,sX,sY,sZ);


Теперь всё считывается правильно!
1613 г. = 2024 г.
Re[2]: Проблема со считыванием русских символов из текстового файла
От: SaZ  
Дата: 05.10.22 14:57
Оценка: 1 (1)
Здравствуйте, RussianFellow, Вы писали:

RF>Проблема решена:


RF>
RF>QString  myString;
RF>string  stdstr;

RF>// ...

RF>myString = QString::fromLocal8Bit(s);
RF>stdstr = myString.toStdString();
RF>strcpy(s,stdstr.c_str());
RF>sscanf(s,"%s %s %s %s",sname,sX,sY,sZ);
RF>


RF>Теперь всё считывается правильно!


Это только на твоём компе. А если по умолчанию в операционке будет другая локаль, то тебя ждёт очередной облом. В очередной раз совет — начни с фундаментальных основ, разберись в теме, вместо поиска готового кода который на время затыкает твой текущий вопрос.
Re[2]: Проблема со считыванием русских символов из текстового файла
От: DiPaolo Россия  
Дата: 05.10.22 16:00
Оценка: 1 (1) +1
RF>
RF>QString  myString;
RF>string  stdstr;

RF>// ...

RF>myString = QString::fromLocal8Bit(s);
RF>stdstr = myString.toStdString();
RF>strcpy(s,stdstr.c_str());
RF>sscanf(s,"%s %s %s %s",sname,sX,sY,sZ);
RF>




Честно говоря, какая-то мешанина: бессмысленно используются вперемешку три типа строк из разных библиотек ("сырые" char, std::string и QString). Вы похожи на не очень шарящего студента, которому лишь бы закрыть лабу — надергал у сокурсников всякий код, слепил кое-как все вместе, подобрал работающую комбинацию, и оно как-то работает. Похоже, вы не понимаете в-принципе, что вы делаете в этом коде.
Патриот здравого смысла
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.