Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: Admin от Ноябрь 16, 2006, 13:19



Название: iconv utf-8
Отправлено: Admin от Ноябрь 16, 2006, 13:19
Есть такая програмка

Код:
#include <stdio.h>
#include <iconv.h>
#include <errno.h>
#include <err.h>
#include <string.h>
#include <libintl.h>

int main() {
  textdomain("libiconv");
  iconv_t cd;
  size_t k, f, t;
  int se;
  char *code = "Вопрос!";
  char* in = code;
  char buf[100];
  char* out = buf;

  cd = iconv_open("WINDOWS-1251","UTF8");
  if( cd == (iconv_t)(-1) )
    err( 1, "iconv_open" );
  f = strlen(code);
  t = sizeof buf;
  memset( &buf, 0, sizeof buf );
  errno = 0;
  k = iconv(cd, &in, &f, &out, &t);
  se = errno;
  printf( "converted: %u,error=%d\n", (unsigned) k, se );

  printf("string: %s\n", buf);

  iconv_close(cd);
  return 0;
}

так в ней iconv спотыкается!

хотя если заменить

  cd = iconv_open("UTF8","WINDOWS-1251");

тогда все путем

вопрос ! почему не поддерживается utf8 -> utf8?


Название: iconv utf-8
Отправлено: Negative от Ноябрь 17, 2006, 13:12
у меня работает

что значит "спотыкается"?


Название: iconv utf-8
Отправлено: Admin от Ноябрь 20, 2006, 01:05
k = iconv(cd, &in, &f, &out, &t);

тут часто ошибку дает k==-1


Название: iconv utf-8
Отправлено: Negative от Ноябрь 20, 2006, 14:38
"часто" - это значит "не всегда"?
я правильно понял, что одна и та же программа периодически работает/неработает? :)

могу предложить только strace'ом пройтись, может чего выловится.

с какими ключами компилишь, кстати?


Название: iconv utf-8
Отправлено: Admin от Ноябрь 22, 2006, 16:21
забил я на iconv
сделал свои таблицы перекодировки

слишком много жалоб на iconv в инете


Название: iconv utf-8
Отправлено: yurror от Февраль 16, 2007, 06:21
А зря. если открыть документацию там черным по белому написано что такая ситуация ВОЗМОЖНА и ее следует отлавливать, принимать действия и снова в бой.
А именно она возникает когда iconv не может перекодировать какой-либо символ.
win -> utf-8 по определению пройдет без проблем.
utf-8 -> win ну уж как повезет. я в UTF могу таких символов наворочать или вместе с китайским написать. и? как прекажите iconv'у реагировать на это?