繁体   English   中英

将Unicode UTF-8和UTF-16数据写入QByteArray

[英]Write Unicode UTF-8 and UTF-16 data into a QByteArray

我正在使用Qt为我的公司开发协议。 需要查询Window注册表并将获得的值写入预先协商的套接字。 我已经将注册表数据读入QString 我必须使用8位Unicode字符和某些16位Unicode字符。 我正在使用QByteArray存储所有数据,然后使用QTcpSocket::write()套接字。 必须遵循一点字节序。

  1. 我如何以Unicode 8位格式将数据从QString获取到QByteArray中(规范说字符类型对应于quint8 )?

  2. 我如何以Unicode 16位格式将数据从QString获取到QByteArray中(规范说字符类型对应quint16 )?

  3. 如何在所有情况下都保持Little Endianness?

(我没有处理Unicode /可变字节编码数据的经验)

查看文档是一个好的开始。

  1. QString :: toUtf8()
  2. 创建一个新的QByteArray从BOM开始。 使用QString :: utf16()获得ushort值,将想要的字节序的上半部分和下半部分屏蔽掉到QByteArray中。
  3. UTF-8没有/需要字节序。 将16位值放入8位数组中以获得较小字节序的ushort掩码为0x00FF然后0xFF00
  4. 今晚在家阅读所有软件开发人员的绝对最低知识,他们必须绝对,绝对地了解Unicode和字符集(无借口!)

对于您的问题2-如何将QString转换为UTF-16 QByteArray,有一个QTextCodec :: fromUnicode()解决方案,如以下代码示例所示:

#include <QCoreApplication>
#include <QTextCodec>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // QString to QByteArray
    // =====================

    QString qstr_test = "test"; // from QString
    qDebug().noquote().nospace() << "qstr_test[" << qstr_test << "]";     // Should see: qstr_test[test]

    QTextCodec * pTextCodec = QTextCodec::codecForName("UTF-16");

    QByteArray qba_test = pTextCodec->fromUnicode(qstr_test); // to UTF-16 QByteArray
    qDebug() << "qba_test[";
    int test_size = qba_test.size();
    for(int i = 0; i < test_size; ++i) { // Should see each UTF-16 encoded character per line like this: ÿþt e s t
        qDebug() << qba_test.at(i);
    }
    qDebug() << "]";

    return a.exec();
}

上面的代码已经使用Qt 5.4进行了测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM