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

时间:2015-08-05 04:52:15

标签: c++ c unicode iconv

选择UTF-32时,对于平台相关的endian,libiconv 正确转换但前缀为0xfeff BOM到输出 流。这会造成一些麻烦。

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

有没有建议如何转换为UTF-32 / UCS-4 与平台相关的endianess没有 手动删除BOM?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

  • UTF-32LE = UCS-4LE:UCS-4小端风味,无BOM
  • UTF-32BE = UCS-4BE:大端风味的UCS-4,没有BOM
  • UTF-16LE:UTF-16小端风味,无BOM
  • UTF-16BE:大端风味的UTF-16,无BOM
  • wchar_t(UCS-4-INTERNAL的别名):UCS-4具有平台的字节顺序和对齐限制

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