2017-02-07 3 views
0

У меня проблема с получением диакритических символов из строк, закодированных в Base64 под QT. Я создаю строку, тогда я кодирую ее с помощью Base 64, и я сохраняю ее в файл. Затем я хочу декодировать символы из открытого файла. Вот как я это делаю.QT диакритические символы из Base64

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

Если у вас есть проблема с жестко запрограммированной строкой в ​​источнике, вам нужно проверить, какая кодировка используется для сохранения .cpp-файла в вашей IDE. –

+0

Это может быть просто артефакт строковой кодировки в строковом литерале. Вы всегда должны обертывать ваши строковые литералы с помощью [QStringLiteral] (http://doc.qt.io/qt-5/qstring.html#QStringLiteral). – MrEricSir

ответ

0

я подозреваю. проблема заключается не в кодировании/декодировании Base64, потому что это точно вернет то, что вы вкладываете в каждый раз, вот в чем суть. Я полагаю, что ваш вызов вашего метода «encode» преобразует строковый литерал или toUtf8 преобразует его неправильно. Распечатайте каждый из этих шагов с помощью qDebug, чтобы узнать, где проблема, а затем вы будете p необходимо тщательно изучить класс QTextCodec для правильной настройки конверсий.

+0

Вы правы. Существует проблема с utf8. Если я изменю свою функцию кодирования на: 'void MainWindow :: encode (const char * input) {' 'QString filename =" output.txt ";' 'QFile file (filename);' 'if (file. открытый (QIODevice :: ReadWrite)) '' { '' QTextStream поток (& файл); '' поток << ввода; '' } '' } ' и ' недействительными MainWindow :: on_treeWidget_2_doubleClicked (Const QModelIndex & индекс) '' { '' QString Qstr1 = "(. [ęśćźół35: 11"; '' кодирования (Qstr1.toUtf8() constData()); '' } ' Тогда я получил ([A? A? A? A? A? 35: 11, написанный в файл – Pilot

+0

Итак, теперь я застрял с преобразованием из const char в base64. Более того, когда я конвертирую из const char в qByteArray, тогда исчезает вся трещина. Я не знаю, как это преобразовать. Мне просто нужно передать текст, который будет закодирован на base64 правильным способом, который я смогу декодировать и получить тот же результат для переданной строки. – Pilot

+0

Попробуйте добавить эту строку в свою основную программу (где угодно до любых преобразований UTF-8): \t QTextCodec :: setCodecForLocale (QTextCodec :: codecForName («UTF-8»)); – goug

Смежные вопросы