Как работать с корейским набором символов между QT и Oracle - PullRequest
1 голос
/ 22 декабря 2011

Я бы хотел использовать Oracle с ODBC.

Я мог бы успешно получить данные из Oracle. Но корейский символ сломан как ???? Как все программисты говорили на интернет-форуме, я пытался применить QTextCodec, как показано ниже.

Я пробовал EUC-KR и другие имена кодеков. Но без изменений.

   QTextCodec *codec = QTextCodec::codecForName("UTF-8");
   QSqlQuery q("select * from temp", db);
             q.setForwardOnly(true);
           QString contect= "";
           while(q.next())
           {
               QByteArray name = q.value(0).toByteArray();
               QString age = q.value(1).toString();
               contect = contect +  codec->toUnicode(name);

               ui.textEdit->setText(contect);
           }

Информация о стороне Oracle - .....

NLS_CHARACTERSET : KO16MSWIN949 
NLS_NCHAR_CHARACTERSET : AL16UTF16
NLS_LANG : KOREAN_KOREA.KO16MSWIN949

Я разрабатываю с помощью eclipse (в Windows 7), и кодировка текста по умолчанию - utf-8.

Буду признателен, если вы дадите мне комментарий.

Спасибо.

1 Ответ

0 голосов
/ 22 декабря 2011

Я думаю, вам нужно изменить имя кодека, так как вам нужен кодек из корейского набора символов в UTF8.

Попробуйте изменить код на:

QTextCodec *codec = QTextCodec::codecForName("cp949");

Поскольку на странице Википедии Кодовая страница 949 упоминается, что это нестандартная версия EUC-KR от Microsoft, вы также можете попробовать EUC-KR.

Попробуйте следующую программу, чтобы получитьсписок текстовых кодеков и псевдонимов:

test.cpp

#include <QtCore>
int main(int argc, char** argv)
{
        QCoreApplication app(argc, argv);
        const auto codecs = QTextCodec::availableCodecs();
        for (auto it = codecs.begin(); it != codecs.end(); ++it)
        {
                const auto codec = QTextCodec::codecForName(*it);
                qDebug() << codec->name() << codec->aliases();
        }
        return 0;
}

test.pro

QT += core
SOURCES=test.cpp
QMAKE_CXXFLAGS += -std=c++0x

Обратите внимание, что для краткости программа использует auto, но для этого требуется компилятор C ++ 11 (протестирован на GCC 4.4).

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