我想将十六进制和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());

Endian是!这等效于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字符的字节顺序翻转(将其更改为little endian)。
QByteArray hex =  QByteArray::fromHex("3306440627064506");
QString str2 = QString::fromUtf16((char16_t*)hex.data());

关于c++ - Qt将UTF16十六进制字符串转换为QString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38698098/

10-11 22:59
查看更多