Отображение символов UTF-8 в PlainTextEdit - PullRequest
1 голос
/ 02 апреля 2011

Я пытаюсь отобразить китайские символы, закодированные в UTF-8, в элементе управления PlainTextEdit, но он не отображает их должным образом.

Мои данные поступают из базы данных, и я знаю, что полученная строкав Qt правильно (байты такие же, как в базе данных).После того, как у меня есть китайский символ в QString, я пробовал разные вещи, чтобы отобразить его, но всегда приводил либо к вопросительным знакам, либо к случайным символам ASCII:

QString chineseChar = query.value(fieldNo).toString(); // get the character

ui->plainTextEdit->appendPlainText(chineseChar); // doesn't work
ui->plainTextEdit->appendPlainText(chineseChar.toUtf8()); // doesn't work
ui->plainTextEdit->appendPlainText(QString::fromUtf8(chineseChar.toAscii()); // doesn't work

Любое предложение о том, как с этим обращаться?

1 Ответ

1 голос
/ 02 апреля 2011

"Мои данные поступают из базы данных, и я знаю, что строка, которую я получаю в Qt, верна (байты такие же, как в базе данных)."

Как вы это проверили?Попробуйте с chineseChar.toUtf8 (). ToHex ().

Когда ваши строковые данные находятся в QString, все элементы пользовательского интерфейса, принимающие QString, будут обрабатывать его правильно.Обычно ошибка возникает при преобразовании данных простого текста (const char * / QByteArray) в QString.Преобразования здесь:

ui->plainTextEdit->appendPlainText(chineseChar.toUtf8()); // doesn't work
ui->plainTextEdit->appendPlainText(QString::fromUtf8(chineseChar.toAscii()); // doesn't work

преобразуют строку Unicode в байтовый массив, а затем неявно обратно в QString, поскольку эти методы ожидают QString.Я предлагаю вам определить QT_NO_CAST_FROM_ASCII и QT_NO_CAST_TO_ASCII, чтобы избежать нежелательных преобразований QByteArray <-> QString.

Если строка неверна, ошибка обычно возникала до , при преобразовании из QByteArray / constв QString, т.е. в query.value (fieldNo) .toString ().Попробуйте:

 QString chineseChar = QString::fromUtf8( query.value(fieldNo).toByteArray() ); 

Если это не поможет, проблема где-то в QtSQL, предполагающем неправильную кодировку для данных, которые он получает из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...