[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:13805] Re: iconv()
From: Tatsuki Sugiura <sugi@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
Subject: [debian-devel:13803] Re: iconv()
Date: Mon, 26 Feb 2001 23:25:27 +0900
> >>> In Message "[debian-devel:13802] iconv()"
> >>> <LKEGINGPONHKOGEAMGDIEEALCAAA.yori_h@xxxxxxxxx>
> >>> "HATTORI Yoriyosi" <yori_h@xxxxxxxxx> said;
> > debパッケージの日本語化に挑戦していますが、iconv()の使用法が、いまひ
> > とつわからずにおります。
> > iconv()で、SJIS -> EUC 変換のコーティング例(sourceでも結構です)など紹介し
> > てもらえないでしょうか。
>
> 私も知りたくて探したのですが、
> http://www.kondara.org/~t/linux/redhat-54.html
> で一つ見つけました。ただ、古いので、結局
> /usr/share/doc/glibc-doc/html/chapters_6.html (の#SEC101)
> を読んで少し修正する必要がありましたが。
> # といってもまだ全然理解できていない。駄目だ……
>
> 他にどこか良い解説ご存じの方いらっしゃいません?
やっぱり
http://www.debian.org/doc/manuals/intro-i18n/index.html
でしょうか?
よいとは言えませんが、ひと昔前動作確認用に作ったのがあったので
つけときます。
----- begin -----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <iconv.h>
#include <langinfo.h>
int
main(int argc, char *argv[])
{
iconv_t cd;
char *inbuf, *outbuf, *outptr;
size_t inbyteleft, outbyteleft, ret;
if (argc < 2) {
printf("usage:\n");
return -1;
}
inbuf = strdup(argv[1]);
inbyteleft = strlen(inbuf);
outbuf = malloc(inbyteleft * 4 + 1);
outbyteleft = inbyteleft * 4;
if (!outbuf) {
printf("error in malloc\n");
return -1;
}
outptr = outbuf;
#if 1
setlocale(LC_ALL, "");
printf("CODE is %s\n", nl_langinfo(CODESET));
/* cd = iconv_open("SJIS", nl_langinfo(CODESET)); */
cd = iconv_open(nl_langinfo(CODESET), "SJIS");
#else
cd = iconv_open("SJIS", "EUC-JP");
#endif
if ((iconv_t)(-1) == cd) {
printf("error in iconv_open\n");
return -1;
}
printf("inbuf = %s(%d)\n", inbuf, inbyteleft);
ret = iconv(cd, &inbuf, &inbyteleft, &outptr, &outbyteleft);
printf("ret = %d\n", ret);
if ((size_t)(-1) != ret) {
ret = iconv(cd, NULL, NULL, &outptr, &outbyteleft);
printf("ret = %d\n", ret);
}
printf("outbuf = %s(%d)\n", outbuf, outbyteleft);
return 0;
}
----- end -----
--
//) 株式会社シスプラン
(// 宇野 武志 (UNO Takeshi)
●| uno@xxxxxxxxxxxxx