簡體   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