【问题标题】:QT diacritic characters from Base64来自 Base64 的 QT 变音符号
【发布时间】:2017-02-07 17:15:50
【问题描述】:

我在从 QT 下以 Base64 编码的字符串中获取变音符号时遇到问题。我正在创建字符串,然后使用 Base 64 对其进行编码,并将其保存到文件中。接下来我想从打开的文件中解码字符。这是我的做法。

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

请帮助我获取开头输入的所有字符。 谢谢

【问题讨论】:

  • 如果您在源代码中遇到硬编码字符串的问题,您需要检查在 IDE 中保存 .cpp 文件时使用的编码方式
  • 这可能只是字符串文字中字符串编码的产物。您应该始终使用 QStringLiteral 包装您的字符串文字。

标签: c++ qt base64 decode


【解决方案1】:

我怀疑问题不在于 Base64 编码/解码,因为这将准确返回您每次输入的内容;这就是重点。我的信念是,您对“编码”方法的调用正在转换字符串文字,或者 toUtf8 正在错误地转换它。使用 qDebug 打印出每个步骤以查看问题所在,然后您可能需要查看 QTextCodec 类以正确设置转换。

【讨论】:

  • 你是对的。 utf8 有问题。如果我改变我的编码功能:void MainWindow::encode(const char * input){ 987654322 QFile file( filename ); 987654324 { 987654326 stream &lt;&lt; input; 987654328 }void MainWindow::on_treeWidget_2_doubleClicked(const QModelIndex &amp;index) 987654331 QString Qstr1 = "([ęśćźół35:11"; 987654333 } 然后我得到 ([A?A?A?A?A?A?35:11 写入文件
  • 所以现在我一直坚持从 const char 到 base64 的转换。此外,当我从 const char 转换为 qByteArray 时,整个编码就会消失。我不知道如何转换。我只需要以正确的方式传递一个将被编码为 base64 的文本,我将能够解码并获得与传递的字符串相同的结果。
  • 尝试将此行添加到您的主程序(在进行任何 UTF-8 转换之前的任何位置):QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
  • 我认为问题比我想象的要大。我正在 QT5 中的 Windows 上工作,甚至这样做:QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland)); QDate date = QDate::currentDate(); QString dateString = QLocale().toString(date); qDebug() &lt;&lt; dateString; qDebug() &lt;&lt; QLocale().name(); 我得到:sroda, 8 lutego 2017 'pl_PL` 而不是 "środa , 8 lutego 2017" 我应该怎么做更改以在 QT 中获得正确的字体?如果它在 qDebug 中不正确,那么它不会在字符串的转换中起作用
  • 您的问题与字体无关;这是关于字符编码的。最好问一个关于字体的新问题,而不是把它和这个讨论混为一谈。您还没有说是否将 setCodecForLocale 行放入。
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 2012-12-10
  • 1970-01-01
  • 2016-01-21
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多