【问题标题】:c++ read from binary file and convert to utf-8c++ 从二进制文件中读取并转换为 utf-8
【发布时间】:2014-10-26 19:40:54
【问题描述】:

我想在 linux 上用freadapplication/octet-stream charset=binary 文件中读取数据并将其转换为UTF-8 编码。我尝试使用iconv,但它不支持binary 字符集。我还没有找到任何解决方案。谁能帮帮我?

谢谢。

【问题讨论】:

  • 文件中的文本是否已经采用 UTF-8 编码?那么就不需要进行任何类型的转换。另外,如果您使用 C++ 编程,为什么要使用旧的 C 函数?
  • 它被编码在“application/octet-stream charset=binary”(文件-bi文件)中。使用旧的 C 函数,因为读取部分是用 C 编写的源代码完成的,字符将在之后交给一个 C++ 函数来完成其余的工作。在 C++ 端,iconv 用于转换为 UTF-8。
  • “二进制”编码到底是什么意思?文本数据没有标准的“二进制”编码。或者更确切地说,由于所有文件和数据最终都存储为二进制 1 和 0,因此 all 编码可以被认为是“二进制”。您确定接收到的数据实际上是文本文件吗?然后你需要知道实际的编码。
  • 根据打印的 MIME,它似乎不是文本。这些是我可以用“gedit”“001007r¢vÃUÍÿqKWAÆñ}ýtdG÷R]”看到的字符。
  • 如果不是文本,你不能期望将它转换为 UTF-8。转换编码只有在文本环境下才有意义。

标签: c++ linux utf-8 character-encoding binary


【解决方案1】:

根据您提供的 MIME,您正在读取非文本二进制格式的数据。您不能使用iconv 或类似名称进行转换,因为它用于将文本从一种(文本)编码转换为另一种。如果您的数据不是文本数据,那么转换为任何字符编码都是没有意义的,只会破坏数据,但不会使其更具可读性。

将二进制显示为可读文本以供检查的典型方法是hex dump。在 c++ 中实现它有一个现有的答案:https://stackoverflow.com/a/16804835/2079303

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多