如何将具有特殊字符的 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()] = '[=12=]';
我将 msg
发送到管道,但我只收到“197,45 µ”,而不是“197,45 µm”。我尝试读取读取端的数据:
char data[15];
read(fd, data, nbytes);
我对 character/string 转换了解不多,所以如果您能解释我应该如何解决这个问题,我将很高兴。谢谢。
在 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;
我有一个包含以 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()] = '[=12=]';
我将 msg
发送到管道,但我只收到“197,45 µ”,而不是“197,45 µm”。我尝试读取读取端的数据:
char data[15];
read(fd, data, nbytes);
我对 character/string 转换了解不多,所以如果您能解释我应该如何解决这个问题,我将很高兴。谢谢。
在 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;