67void QNdefNfcTextRecord::setLocale(
const QString &locale)
69 QByteArray p = payload();
71 const quint8 status = p.isEmpty() ? 0 : p.at(0);
73 const quint8 codeLength = status & 0x3f;
76 const quint8 statusWithoutLanguageCodeLength = status & 0xc0;
78 QByteArray localeData = locale.toLatin1();
79 if (localeData.size() > 0x3f) {
80 qWarning(
"QNdefNfcTextRecord::setLocale(): locale is %" PRIdQSIZETYPE
" bytes long but max "
81 "is 63. Truncating it.", localeData.size());
82 localeData.truncate(0x3f);
85 const quint8 newStatus = statusWithoutLanguageCodeLength | localeData.size();
88 p.replace(1, codeLength, localeData);
96QString QNdefNfcTextRecord::text()
const
98 const QByteArray p = payload();
103 const quint8 status = p.at(0);
104 const bool utf16 = status & 0x80;
105 const quint8 codeLength = status & 0x3f;
107 if (p.size() < 1 + codeLength)
110 auto toUnicode = QStringDecoder(
111 utf16 ? QStringDecoder::Encoding::Utf16BE : QStringDecoder::Encoding::Utf8,
112 QStringDecoder::Flag::Stateless);
114 return toUnicode(QByteArrayView(p.constData() + 1 + codeLength, p.size() - 1 - codeLength));
120void QNdefNfcTextRecord::setText(
const QString text)
122 if (payload().isEmpty())
123 setLocale(QLocale().name());
125 QByteArray p = payload();
127 const quint8 status = p.at(0);
129 const bool utf16 = status & 0x80;
130 const quint8 codeLength = status & 0x3f;
132 p.truncate(1 + codeLength);
134 auto fromUnicode = QStringEncoder(
135 utf16? QStringEncoder::Encoding::Utf16BE : QStringEncoder::Encoding::Utf8,
136 QStringEncoder::Flag::Stateless|QStringEncoder::Flag::WriteBom);
138 p += fromUnicode(text);