繁体   English   中英

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());

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM