2016-11-12 80 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

您需要Unicode和UTF-8或UTF-16 – duffymo

+0

使用unicode,因爲其他lang如阿拉伯語和漢語,日語字母表需要一個字符以上的一個字節 – Raindrop7

+0

否...我這樣做,但不工作.... – Qasim

回答

1

QString有Unicode支持。那麼,有什麼不對具有*

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

大多數現代編譯器使用UTF-8編碼這普通字符串字面(您可以強制在C使用u8"سلام عليكم" ++ 11,看here )。字符串文字的數組類型爲char s。當QStringis initialized from a const char*,它希望數據以UTF-8編碼。一切都按預期工作。

所有輸入控件和文本繪製方法在Qt可以採取這樣的字符串,並沒有任何問題顯示它。請參閱here以獲取支持的語言列表。

至於你有這個字符串寫入文件的問題,你只需要一組數據你正在編寫能夠編碼這些國際字符(如UTF-8)編解碼器的編碼。

docs,當使用QTextStream::operator<<(const QString& string),該字符串是使用分配編解碼器之前它被寫入到流編碼。

你的問題是,你正在分配之前,使用operator<<。你應該在之前寫setCodec。你的代碼應該是這個樣子:

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(); 
} 

*translation phase 1,在基本字符的任何源文件字符沒有設置通用字符名稱取代了指定字符,基本字符集定義如下:

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

相關問題