如果输出是平台端序,ICONV写入BOM的问题

Issue with ICONV writing BOM if output is platform endian

本文关键字:写入 ICONV BOM 问题 输出 平台 如果      更新时间:2023-10-16

当选择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 end - flavour, without BOM
  • UTF-32BE = UCS-4BE: UCS-4大端风味,不含BOM
  • UTF-16LE: UTF-16 in little endian flavour, without BOM
  • UTF-16BE: UTF-16 in big - end flavour, without BOM
  • wchar_t (UCS-4- internal的别名):UCS-4与平台的端序和对齐限制

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