iconv

Автор mihail_1, 19 июля 2012, 15:53:24

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

mihail_1

Вызываю:
  iconv_utf8=iconv_open("WINDOWS-1251","UTF-8");
  u1=buf_data;
  u2=buf_data;
  l1=l_buf;
  l2=max_buf-1;
  iconv(iconv_utf8,&u1,&l1,&u2,&l2);

Получаю (при вызове iconv):
: ../iconv/skeleton.c:736: __gconv_transform_utf8_internal: Assertion `outbuf == outerr' failed.
Аварийный останов


Как починить?

qupl

Без языка (предположим Си) и типов переменных кусок кода ни о чем.
Вход и выход - это один и тот же буфер?

mihail_1

Да вход и выход это один буфер, но WINDOWS-1251 в любом случае не длиннее UTF-8.
На данный момент я написал свою версию данной функции и проблема снялась.

Olej

#3
Цитата: mihail_1 от 25 июля 2012, 19:02:21
Да вход и выход это один буфер, но WINDOWS-1251 в любом случае не длиннее UTF-8.
при чём здесь длиннее ... не длиннее - функция не допускает прелбразование "на месте", в одном буфере.
достаточно обычная ситуация, такое же поведение (может показаться необычным), например, элементарной strcat().

Цитата: mihail_1 от 25 июля 2012, 19:02:21
На данный момент я написал свою версию данной функции и проблема снялась.
чем писать свою версию библиотечной функции, всегда лучше с большей пользой использовать это время, и прочитать документацию 2 раза. ;)
объяснять почему? или сами сообразите? ;)