Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
One
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 54
#1

Проверка текста в файле не работает для русских символов - C++ Qt

14.08.2014, 17:24. Просмотров 821. Ответов 9
Метки нет (Все метки)

Всем привет!
У меня есть QString s. Я ее получил с помощью file.readAll и преобразованием ByteArray в QString. Дело в том, что в файле могли быть русские символы, а следующая проверка:
C++ (Qt)
1
if (s[i] == 'н')
не работает. Подскажите, как исправить проблему?

P.S. На всякий случай: мне надо никуда эти русские символы потом писать и т.д., только именно считать и распарсить из файла
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 17:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка текста в файле не работает для русских символов (C++ Qt):

Обработка русских символов в Qt - C++ Qt
Совсем недавно начал изучать Qt. Написал вот такую функцию, которая должна возвращать порядковый номер первой встретившийся заглавной...

Отображение русских символов в проекте Qt Widgets - C++ Qt
Всем доброго здравия. Напоролся на такую проблему. В приведенном в качестве примера проекте (он небольшой) подписи на кнопках задаются в...

Не работает регулярка для русских символов - PHP
Здравствуйте, есть два регулярных выражения. Для латинских символов всё работает, для русских же - нет, не могу понять в чём проблема,...

Расшифровка MD5 не работает для русских символов - C#
Код Отлично отрабатывает английский словарь, но Русские буквы пропускает! Подскажите в чём ошибка? using System; using...

Кодирование кода ASCII в строку не работает для русских символов - C#
У меня есть массив byte с кодами символов,мне нужно перекодировать его в строку,но проблема в том что не читаются РУССКИЕ буквы и на выходе...

Почему функция ucfirst не работает в кодировке utf-8 для русских символов - PHP
Помогите, пожалуйста. Почему функция ucfirst не работает в кодировке utf-8 для русских символов. Как исправить. <?php ...

9
schdub
3012 / 1357 / 265
Регистрация: 19.01.2009
Сообщений: 3,598
Завершенные тесты: 1
14.08.2014, 17:30 #2
One, какая кодировка файла откуда читаете? Какая кодировка исходного файла? Скорее всего они разные.
0
One
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 54
14.08.2014, 17:38  [ТС] #3
schdub,
Кодировка файла, откуда читаю, windows-1251.
Что вы имеете в виду под "исходным файлом"?
0
schdub
3012 / 1357 / 265
Регистрация: 19.01.2009
Сообщений: 3,598
Завершенные тесты: 1
14.08.2014, 17:44 #4
Цитата Сообщение от One Посмотреть сообщение
Что вы имеете в виду под "исходным файлом"?
Кодировка исходного .cpp файла, т.е. кодировка в редакторе исходного текста.
0
One
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 54
14.08.2014, 17:55  [ТС] #5
schdub, вроде UTF-8. Действительно, разные. Но пока не очень понял, как это связано и как исправить собственно...
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
14.08.2014, 18:39 #6
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
QFile f("Text File.txt");
f.open(QFile::ReadOnly);
QTextStream stream(&f);
stream.setCodec(QTextCodec::codecForName("Windows-1251"));
QString s = stream.readAll();
 
// или
//QByteArray arr = f.readAll();
//QTextCodec *c = QTextCodec::codecForName("Windows-1251");
//QString s = c->toUnicode(arr);
 
qDebug() << s;
0
schdub
3012 / 1357 / 265
Регистрация: 19.01.2009
Сообщений: 3,598
Завершенные тесты: 1
14.08.2014, 18:40 #7
One,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ...
    QByteArray d(file.readAll());
    qDebug() << d.toHex(); // d4fbe2e020eeebe4c6
    // допустим, d == "Фыва олдЖ" в Windows-1251 (8 - бит на символ)
 
    QString s1(d), s2(QTextCodec::codecForName("Windows-1251")->toUnicode(d));
    // s1 - преобразовано в QString без перекодирования
    // s2 - преобразовано с указанием исходной кодировки
 
    qDebug() << (s1[0] == 'Ф'); // false
    qDebug() << (s2[0] == 'Ф'); // false
 
    qDebug() << s1[0].unicode(); // 212 или 0xd4
    qDebug() << s2[0].unicode(); // 1060 или 0x0424
 
    qDebug() << (s1[0] == 0xd4);   // true
    qDebug() << (s2[0] == 0x0424); // true
// ...
0
One
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 54
14.08.2014, 19:05  [ТС] #8
RazrFalcon, теперь все отображается корректно, но условие почему-то все равно не выполняется...
То есть, если вывожу qDebug() << s[i], выводится 'н', а в условие не заходит...
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
14.08.2014, 19:15 #9
One, а что у вас за компилятор вообще, к примеру clang не дает собрать такой код:
C++ (Qt)
1
2
3
error: character too large for enclosing character literal type
qDebug() << (s.at(0) == 'ф');
                        ^
C++ (Qt)
1
qDebug() << (s.at(0) == QString::fromUtf8("ф").at(0)); // true
0
One
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 54
14.08.2014, 19:17  [ТС] #10
RazrFalcon,
MinGW 4.8.2

Да, уже сам нашел решение в гугле
Чуть по-другому, но суть та же
if (s[i] == QString::fromLocal8Bit("н")[0])
0
14.08.2014, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 19:17
Привет! Вот еще темы с ответами:

Почему функция strtolower не работает в кодировке utf-8 для русских символов - PHP
Помогите, пожалуйста. Почему функция strtolower не работает в кодировке utf-8 для русских символов. Как исправить. &lt;?php ...

Написать программу для замены русских символов в текстовом файле на "0" - C#
Народ, помогите написать программу и метод который в указанном текстовом файле ищет русские символы и заменяет их на цифру 0, пожалуйста.

Поиск русских символов в файле - C#
Мне дано имя файла. нужно в ней найти русские символы и пробелы... если есть то выдать ошибку. Да и как в treeview выделить красным цветом...

Проверка русских символов в строке - C++
Здравствуйте. Эта программка просит ввести строку,и если есть слово, заканчивающиеся на &quot;к&quot; + space, то она должна вывести YES, а если это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru