![](/img/trans.png)
[英]What unicode encoding (UTF-8, UTF-16, other) does Windows use for its Unicode data types?
[英]Write Unicode UTF-8 and UTF-16 data into a QByteArray
我正在使用Qt为我的公司开发协议。 需要查询Window注册表并将获得的值写入预先协商的套接字。 我已经将注册表数据读入QString
。 我必须使用8位Unicode字符和某些16位Unicode字符。 我正在使用QByteArray
存储所有数据,然后使用QTcpSocket::write()
套接字。 必须遵循一点字节序。
我如何以Unicode 8位格式将数据从QString
获取到QByteArray
中(规范说字符类型对应于quint8
)?
我如何以Unicode 16位格式将数据从QString
获取到QByteArray
中(规范说字符类型对应quint16
)?
如何在所有情况下都保持Little Endianness?
(我没有处理Unicode /可变字节编码数据的经验)
查看文档是一个好的开始。
0x00FF
然后0xFF00
。 对于您的问题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.