如果输出是平台端序,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 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会导致问题。
相关文章:
- 写入向量<向量<bool>>
- 如何将内容数组写入文本文件?
- 写入位置0x0000000C时发生访问冲突
- 使用ios:ate写入到流会覆盖现有文件
- 独立读取-修改-写入顺序
- 为什么在某些情况下不写入此文件?
- 用C++将哈希表写入文件并从文件中恢复
- std::当在256字节边界上写入整数时,流的奇怪行为
- 为什么指针不写入类的地址?
- 如何打开并写入一个名称取自C++中字符串的文件
- 如何在C++中从文件中读取/写入多个对象
- 链表中写入访问冲突的未知原因
- 着色器纹理值与创建纹理时写入的值不同
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 在C++中一次将矢量值写入多个文件
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 写入文件会产生一个空文件或根本没有文件
- std::带有自定义缓冲区的 iostream 不允许我写入
- 在 C++ 中使用指针将对象写入文件
- 如果输出是平台端序,ICONV写入BOM的问题