2016-11-12 10 views
2

QStringで言語(アラビア語や中国語など)を使用するにはどうすればよいですか?QStringで言語(アラビア語や中国語など)を使用するにはどうすればよいですか?

私はQString作成しています:

QString m = "سلام علیکم"; 

をして、私が使用してファイルにそれを保存しています:私は結果ファイルを開くと、

void stWrite(QString Filename,QString stringtext){ 
    QFile mFile(Filename); 

    if(!mFile.open(QIODevice::WriteOnly | QIODevice::Append |QIODevice::Text)) 
    { 
     QMessageBox message_file_Write; 
     message_file_Write.warning(0,"Open Error" 
            ,"could not to open file for Writing"); 
     return; 
    } 
    QTextStream out(&mFile); 
    out << stringtext<<endl; 
    out.setCodec("UTF-8"); 

    mFile.flush(); 
    mFile.close(); 
} 

をしかし、私は以下を参照してください。

???? ???? 

何が問題になりますか?私のキャラクターをファイルに正しく保存させるにはどうすればいいですか?

+0

ユニコードとUTF-8またはUTF-16が必要です。 – duffymo

+0

ユニコードは、他の言語日本語のアルファベットは1つの文字のために1バイト以上取る – Raindrop7

+0

いいえ...私はそれをするが、働かない... – Qasim

答えて

1

QStringには、ユニコードサポートがあります。だから、*を持つには何の問題もありません:

最近のほとんどのコンパイラは(あなたがhereを参照してください、u8"سلام عليكم"を使用してC++ 11をこの中に強制することができリテラルこの通常の文字列をエンコードするUTF-8を使用し

QString m = "سلام علیکم"; 
)。文字列リテラルのタイプはcharです。 QStringis initialized from a const char*の場合、データはUTF-8でエンコードされることが予想されます。そして、すべてが期待通りに機能します。

Qtのすべての入力コントロールとテキスト描画メソッドは、このような文字列を取り、問題なく表示できます。サポートされている言語のリストについては、hereを参照してください。

この文字列をファイルに書き込む問題については、書き込むデータのエンコードを、これらの国際文字をエンコードできるコーデック(UTF-8など)に設定するだけで済みます。 docsから、

QTextStream::operator<<(const QString& string)を使用して、文字列は、それがストリームに書き込まれる前割り当てられたコーデックを使用してエンコードされます。

問題は、割り当てる前にoperator<<を使用していることです。あなたはの前にsetCodecにすべきです。あなたのコードは次のようになりますない基本文字内の任意のソースファイルの文字がを設定し、translation phase 1

void stWrite(QString Filename,QString stringtext){ 
    QFile mFile(Filename); 

    if(!mFile.open(QIODevice::WriteOnly | QIODevice::Append |QIODevice::Text)) 
    { 
     QMessageBox message_file_Write; 
     message_file_Write.warning(0,"Open Error" 
            ,"could not to open file for Writing"); 
     return; 
    } 
    QTextStream out(&mFile); 
    out.setCodec("UTF-8"); 
    out << stringtext << endl; 

    mFile.flush(); 
    mFile.close(); 
} 

*指定しているユニバーサル文字名に置き換えられます文字、基本的な性格はを設定し、次のように定義されています

N4140§2.3[LEX。文字セット]/1

基本的なソース・キャラクタ・セットは、96個の文字からなる:スペース 文字、水平タブ、垂直タブ、フォームフィードを表す制御文字、改行、プラス以下の91個のグラフィカル文字:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

ABCDEFGHIJKLMNOPQRSTU VWXYZ

_ {} [] #()<>%:; 。 ? * + -/^ & | 〜!

QString m = "سلام عليكم"; 

のようなものに変換されます::=、\ ""

は、これは文字列のようなことを意味し、ソースファイルをエンコードでエンコードされていると仮定すると

QString m = "\u0633\u0644\u0627\u0645\u0020\u0639\u0644\u064a\u0643\u0645"; 

ことUTF-8などの文字の保存をサポートします

関連する問題