簡體   English   中英

如何將帶有特殊字符的 QString 轉換為字節流以通過 Linux 管道發送

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM