使用iconv同时保持代码正确性

时间:2011-09-03 15:38:15

标签: c++ encoding char iconv wchar-t

我目前正在使用iconv转换具有不同编码的文档。

iconv()函数具有以下原型:

size_t iconv (
  iconv_t cd,
  const char* * inbuf,
  size_t * inbytesleft,
  char* * outbuf,
  size_t * outbytesleft
);

到目前为止,我只需转换char*类型的缓冲区,但我也意识到我必须转换wchar_t*类型的缓冲区。事实上,iconv甚至为这样的缓冲区提供了专用的编码名称"wchar_t":此编码适应操作系统设置:即,在我的计算机上,它指的是Windows上的UCS-2和UTF -32在Linux上。

但问题在于:如果我有一个wchar_t*的缓冲区,我可以reinterpret_cast将其char*缓存到iconv的缓冲区中,但是然后我面部实现定义的行为:我无法确定所有编译器在演员表方面的行为是否相同。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

reinterpret_cast<char const*>是安全的,不是实现定义的,至少在任何实际实现上都没有。

该语言明确允许将任何对象重新解释为字符数组,并且获取该字符数组的方式是使用reinterpret_cast