使用 QTcpSocket 传输文件时出现奇怪的字符

Posted

技术标签:

【中文标题】使用 QTcpSocket 传输文件时出现奇怪的字符【英文标题】:Strange characters when transferring file with QTcpSocket 【发布时间】:2013-03-26 02:52:12 【问题描述】:

我正在尝试使用 QTcpSocket 传输文件。连接运行良好,但我的问题是当我尝试在文件中记录接收到的字节时。当我打开文件时,文件开头有一些奇怪的字符。这些字符是什么?

【问题讨论】:

分析更多我意识到该文件总是比原始文件多 4 个字节。独立是txt文件还是二进制文件。 如何读取文件,将其写入套接字,从套接字读取并将其写回文件?如果没有这部分代码,我们将无法帮助您。如果您只是将文件读取为 QByteArray 并将其写入为 QByteArray 将没有编码开销 【参考方案1】:

我的问题是我将整个对象保存在我的文件中。当我们在流中使用运算符>> 时,Qt 将整个对象序列化并发送出去。如果您只想写入文件的字节,或者您想要的任何内容,您需要使用writeRawData 或将 char * 传递给字节的写入方法。

:)

【讨论】:

【参考方案2】:

他们可能正在描述文件文本的编码。例如 UTF-8 v. ISO### 标准。如果您获取文本块并将其设置为正确的编码,这些字符很可能会消失。

这里是了解它的起点:

http://en.wikipedia.org/wiki/Unicode_and_html

http://qt-project.org/doc/qt-4.8/qstring.html#toUtf8

希望对您有所帮助。

【讨论】:

分析更多我意识到该文件总是比原始文件多 4 个字节。独立是txt文件还是二进制文件 是描述缓冲区大小的整数吗?

以上是关于使用 QTcpSocket 传输文件时出现奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 QtNetwork,因为应用程序使用不同的线程

使用 CSS 引导程序时出现奇怪的错误

在 Qt 中移动头文件时出现奇怪的预处理器行为

重命名和重新创建文件时出现奇怪的时间戳重复

使用 PDF 内容创建存档/.pkg 以在 Apple 托管时出现可执行文件的奇怪错误

使用 CreateProcess 时出现奇怪的减速