[英]How to convert QString with special characters into a byte stream to send it via Linux pipe
我有一個包含以 UTF-8 編碼的特殊字符 (µ) 的 QString:
QString data = "197,45 \xc2\xb5m";
我需要通過 Linux 管道將該字符串發送到另一個程序。 我試圖將字符串轉換成這樣的:
char msg[15];
for(int i = 0; i < data.length(); i++) {
msg[i] = data.toUtf8()[i];
}
msg[data.length()] = '\0';
我將msg
發送到管道,但我只收到“197,45 µ”,而不是“197,45 µ m ”。 我嘗試在讀取端讀取數據:
char data[15];
read(fd, data, nbytes);
我不太了解字符/字符串轉換,所以如果你能解釋我應該如何解決這個問題,我會很高興。 謝謝你。
在 QString 中存儲 UTF-8 編碼的字節在概念上是錯誤的。 為此使用 QByteArray,或者使用QString::fromUtf8()
將您的 UTF-8 字符串文字轉換為正確的 QString。 要返回,請使用qUtf8Printable
宏或QString::toUtf8
獲取QByteArray
。
您正在做的似乎主要是將數據“序列化”到二進制管道中,因此一個有意義的選項是使用專為此目的設計的QDataStream
。
就像是:
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
QString data = "197,45 \xc2\xb5m";
stream << data;
sendToPipe(buffer.constData(), buffer.size());
另一邊類似,使用operator>>
從流中讀取數據。
QByteArray buffer(dataPtr, size);
QDataStream stream(buffer);
QString data;
stream >> data;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.