Используйте iconv API в C - PullRequest
       24

Используйте iconv API в C

0 голосов
/ 24 декабря 2010

Я пытаюсь преобразовать строку sjis в utf-8, используя iconv API.Я скомпилировал его уже успешно, но результат оказался не таким, как я ожидал.Мой код:

void convertUtf8ToSjis(char* utf8, char* sjis){
  iconv_t icd;
  int index = 0;
  char *p_src, *p_dst;
  size_t n_src, n_dst;
  icd = iconv_open("Shift_JIS", "UTF-8");
  int c;
  p_src = utf8;
  p_dst = sjis;
  n_src = strlen(utf8);
  n_dst = 32; // my sjis string size
  iconv(icd, &p_src, &n_src, &p_dst, &n_dst);
  iconv_close(icd);
}

Я получил только случайные числа.Есть идеи?

Редактировать: Мой ввод

char utf8[] = "\xe4\xba\x9c";       //亜

И вывод должен быть: 0x88 0x9F

Но на самом деле: 0x30 0x00 0x00 0x31 0x00 ...

1 Ответ

1 голос
/ 24 декабря 2010

Мне не удалось продублировать проблему. Единственное, что я могу предложить, это быть осторожным с вашими ассигнованиями.

Код:

#include <iconv.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

void convertUtf8ToSjis(char* utf8, char* sjis){
 ...
}

int main(int argc, char *argv[])
{
  char utf8[] = "\xe4\xba\x9c";
  char *sjis;
  sjis = malloc(32);
  convertUtf8ToSjis(utf8, sjis);
  int i;
  for (i = 0; sjis[i]; i++)
  {
    printf("%02x\n", (unsigned char)sjis[i]);
  }
  free(sjis);
}

Выход:

$ gcc t.c
$ ./a.out
88
9f
...