2011-12-22 5 views
1

OracleをODBCで使用したいと考えています。QTとOracleの間の韓国語の文字セットの処理方法

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側の情報は、私は(Windows 7で)日食を開発していますし、デフォルトのファイルのテキストエンコーディングがUTF-8である.....

NLS_CHARACTERSET : KO16MSWIN949 
NLS_NCHAR_CHARACTERSET : AL16UTF16 
NLS_LANG : KOREAN_KOREA.KO16MSWIN949 

です。

コメントをいただければ幸いです。

ありがとうございました。

+0

別の 'QTextCodec * codec2 = QTextCodec :: codecForName(" UTF-16 "); UTF-16のために1を作成してから' contect = contect + codec2-> toUnicode(name); 'を実行できますか? – ProfessionalAmateur

+0

¤おそらく、DB結果の文字エンコーディングから、QT文字列が使用するエンコーディングに変換するのに役立ちます。あなたの間違った結果はあなたが現在行っていることではないことを強く示しています。つまり、DBの結果はUTF-8でエンコードされていません。乾杯&乾杯、 –

答えて

0

韓国語の文字セットからコーデックが必要な場合は、 UTF8にコーデック名を変更する必要があると思います。 Code page 949のためのWikipediaのページには、それがEUC-KRの非標準のMicrosoftのバージョンであることを述べているように、あなたもEUC-KRを試みることができる

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

はにあなたのコードを変更してみてください。

テキストコーデックとエイリアスのリストを取得するには、以下のプログラムを試してみてください。

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)。

関連する問題