[英]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());
Endian是! 这等效于L"\\x3306\\x4406\\x2706\\x4506"
,而不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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.