如果输出是平台字节序,ICONV 写入 BOM 会出现问题

Issue with ICONV writing BOM if output is platform endian

选择 UTF-32 时,对于平台相关的字节序,libiconv 正确转换但在输出前添加 0xfeff BOM 前缀 溪流。这会引起一些麻烦。

选择UCS-4时,没有写BOM,但在我的系统上 转换为 'big endian' 恰好不是 我系统的字节顺序。

有没有关于如何转换为 UTF-32/UCS-4 的建议? 具有依赖于平台的字节序,而没有 手动删除 BOM?

如果您不指定字节顺序,则默认始终为大端。要使用当前平台的字节顺序,请使用特殊的 UCS-4-INTERNAL(或 UCS-2-INTERNAL)编码。

iconv(glibc 实现和 GNU libiconv 实现)支持指定固定字节顺序的编码名称:

  • UTF-32LE = UCS-4LE : UCS-4 in little endian flavor, without BOM
  • UTF-32BE = UCS-4BE : UCS-4 in big endian flavor, without BOM
  • UTF-16LE : UTF-16 in little endian flavor, without BOM
  • UTF-16BE : UTF-16 in big endian flavor, without BOM
  • wchar_t(UCS-4-INTERNAL 的别名):具有平台字节顺序和对齐限制的 UCS-4

注意这些编码的字符串最好不要传输到其他机器,否则缺少BOM会出问题