Загрузите и отобразите QString с правильной кодировкой

Я пытаюсь загрузить имя из файла, содержащего несколько специальных символов, и, если оно есть в файле (выглядит как meno: Marek Ružička /), отобразить его. Код здесь:

QFile File("info/"+meno+".txt");
File.open(QIODevice::ReadOnly);
QVariant Data(File.readAll());
QString in = Data.toString(), pom;
if(in.contains("meno:")){
pom = in.split("meno:").at(1);
pom=pom.split("/").at(0);
ui->label_meno->setText(trUtf8("Celé meno: ")+pom);}

часть trUtf8 («Celé meno:») отображается хорошо, но я не могу найти, как отобразить строку в pom, она сама по себе выглядит как Marek RužiÄka, использование функции toUtf8 () делает ее Marek Ruþ RuiÃÂka, я тоже пытался преобразовать ее в stdString но тоже не работает. Я не уверен, что преобразование из QFile в QVariant и в QString является правильным, если это вызывает проблемы, как правильно читать данные?

3

Решение

Попробуй это:

QTextCodec* utf = QTextCodec::codecForName("UTF-8");
QByteArray data = <<INPUT QBYTEARRAY>>.toUtf8();
QString utfString = utf->toUnicode(data);
qDebug() << utfString;
3

Другие решения

Одним из правильных способов является использование QTextStream для чтения, а затем вы можете указать кодек для UTF 8 следующим образом:

in.setCodec("UTF-8");

См. Документацию для получения дополнительной информации:

void QTextStream :: setCodec (const char * codecName)

Устанавливает кодек для этого потока в QTextCodec для кодировки, указанной codecName. Общие значения для codecName включают «ISO 8859-1», «UTF-8» и «UTF-16». Если кодировка не распознается, ничего не происходит.

Example:

QTextStream out(&file);
out.setCodec("UTF-8");

Другой правильный способ — исправить ваш текущий код без использования QTextStream используя выделенный метод QString следующее:

QString in = QString::fromUtf8(File.readAll()), pom;

Обратите внимание, что, хотя вы можете добавить больше обработки ошибок в свой код, чем доступно сейчас.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector