2017-02-07 45 views
0

我在QT下從Base64編碼的字符串獲取變音符號時遇到問題。我創建字符串,然後我使用Base 64對其進行編碼,然後將其保存到文件中。接下來,我想解碼打開的文件中的字符。這是我如何做到這一點。來自Base64的QT變音字符

void MainWindow::on_treeWidget_2_doubleClicked(const QModelIndex &index){ 
    encode("([ęśćźół35:11"); 
    decode(); 
} 

void MainWindow::encode(QString input){ 
    QString item_to_change = input.toUtf8().toBase64(); 
    QString filename="output.txt"; 
    QFile file(filename); 
    if (file.open(QIODevice::ReadWrite)) 
    { 
     QTextStream stream(&file); 
     stream << encoded; 
    } 

} 

void MainWindow::decode(){ 
    QFile input("output.txt"); 
    if (input.open(QIODevice::ReadOnly)) { 
     data_in = input.readAll(); 
    } 
    QString strRestored(QByteArray::fromBase64(data_in)); 
    qDebug() << strRestored; 
} 

這樣做,我只得到([esczol35:11,而不是([ęśćźół35:11

請幫我把所有字符作爲開頭進入 感謝

+0

如果源代碼中的硬編碼字符串存在問題,則需要檢查在IDE中保存.cpp文件時使用了哪種編碼。 –

+0

這可能只是字符串文本中字符串編碼的人工產物。你應該總是用[QStringLiteral](http://doc.qt.io/qt-5/qstring.html#QStringLiteral)包裝你的字符串文字。 – MrEricSir

回答

0

我懷疑。這個問題並不在Base64編碼/解碼中,因爲這將會每次都返回到你輸入的內容;這就是它的重點。我相信你對你的「編碼」方法的調用是轉換字符串,或者toUtf8正在轉換它不正確。使用qDebug打印出每個步驟,看看問題出在哪裏,然後你會強制需要查看QTextCodec類來正確設置轉換。

+0

你說得對。 utf8有一個問題。如果我將編碼函數更改爲: 'void MainWindow :: encode(const char * input){' 'QString filename =「output.txt」;' 'QFile file(filename);' 'if(file。開放(QIODevice中::讀寫))'' {'' 流QTextStream(文件);'' 流<<輸入;'' }'' }' 和 '空隙的MainWindow :: on_treeWidget_2_doubleClicked(常量QModelIndex&指數)'' {'' 的QString Qstr1 = 「([ęśćźół35:11」;'' 編碼(Qstr1.toUtf8()constData());' '}' 然後我得到了([A?A?A?A?A?35:11寫入文件 – Pilot

+0

因此,現在我堅持從const char轉換爲base64。此外,當我從常量字符轉換爲qByteArray然後整個編碼消失。我不知道如何獲得這個轉換。我只需要傳遞一個將以正確的方式編碼爲base64的文本,以便我能夠解碼並獲得相同的結果以傳遞字符串。 – Pilot

+0

嘗試將此行添加到主程序(在執行任何UTF-8轉換之前的任何位置):\t QTextCodec :: setCodecForLocale(QTextCodec :: codecForName(「UTF-8」)); – goug