Использование iconv при сохранении правильности кода - PullRequest
2 голосов
/ 03 сентября 2011

В настоящее время я использую 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" для таких буферов: эта кодировка адаптируется к настройкам операционной системы: то есть на моих компьютерах она относится к UCS-2 в Windows и к UTF-32 в Linux.

Но здесь кроется проблема: если у меня есть буфер wchar_t*, я могу reinterpret_cast использовать его в буфер char*, чтобы использовать его в iconv, но тогда я сталкиваюсь с поведением, определяемым реализацией: Я не могу быть уверен, что все компиляторы будут вести себя одинаково в отношении приведения.

Что мне здесь делать?

1 Ответ

3 голосов
/ 03 сентября 2011

reinterpret_cast<char const*> является безопасным и не определяется реализацией, по крайней мере, не для реальных реализаций.

Язык явно позволяет интерпретировать любой объект как массив символов и способ получения этого массива символовиспользует reinterpret_cast.

...