Qt将UTF16十六进制字符串转换为QString

Qt Convert UTF16 Hex string to QString

本文关键字:转换 QString 字符串 十六进制 UTF16 Qt      更新时间:2023-10-16

我想将十六进制和utf16编解码器中的字符串转换为QString例如,就像我从这个代码中获得的:

QString str1 = QString::fromWCharArray(L"x0633x0644x0627x0645"); // 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"x3306x4406x2706x4506",而不是L"x0633x0644x0627x0645"

因此,为了克服这个问题,您可以将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());