Qt 将 UTF16 十六进制字符串转换为 QString
Qt Convert UTF16 Hex string to QString
我想将十六进制和 utf16 编解码器中的字符串转换为 QString
例如,就像我从这段代码中获得的一样:
QString str1 = QString::fromWCharArray(L"\x0633\x0644\x0627\x0645"); // what I want
但是当我尝试下面的代码时,每件事都出错了,正确的方法是什么。
QByteArray hex = QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data());
这段代码有什么问题?
QByteArray hex = QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data());
字节序是!这相当于 L"\x3306\x4406\x2706\x4506"
而不是 L"\x0633\x0644\x0627\x0645"
.
所以要克服这个问题,你可以将 BOM 添加到字符串
QByteArray hex = QByteArray::fromHex("FEFF0633064406270645");
QString str2 = QString::fromUtf16((char16_t*)hex.data());
没有测试,但应该可以解决问题。
另一种解决方案是翻转单个 UTF-16 字符中的字节顺序(将其更改为小端)。
QByteArray hex = QByteArray::fromHex("3306440627064506");
QString str2 = QString::fromUtf16((char16_t*)hex.data());
我想将十六进制和 utf16 编解码器中的字符串转换为 QString 例如,就像我从这段代码中获得的一样:
QString str1 = QString::fromWCharArray(L"\x0633\x0644\x0627\x0645"); // what I want
但是当我尝试下面的代码时,每件事都出错了,正确的方法是什么。
QByteArray hex = QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data());
这段代码有什么问题?
QByteArray hex = QByteArray::fromHex("0633064406270645");
// wrong text in str2 it should be equal to str1
QString str2 = QString::fromUtf16((char16_t*)hex.data());
字节序是!这相当于 L"\x3306\x4406\x2706\x4506"
而不是 L"\x0633\x0644\x0627\x0645"
.
所以要克服这个问题,你可以将 BOM 添加到字符串
QByteArray hex = QByteArray::fromHex("FEFF0633064406270645");
QString str2 = QString::fromUtf16((char16_t*)hex.data());
没有测试,但应该可以解决问题。
另一种解决方案是翻转单个 UTF-16 字符中的字节顺序(将其更改为小端)。
QByteArray hex = QByteArray::fromHex("3306440627064506");
QString str2 = QString::fromUtf16((char16_t*)hex.data());