[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:13806] Re: iconv()
At Mon, 26 Feb 2001 23:25:27 +0900,
Tatsuki Sugiura wrote:
> >>> 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)
> を読んで少し修正する必要がありましたが。
> # といってもまだ全然理解できていない。駄目だ……
>
> 他にどこか良い解説ご存じの方いらっしゃいません?
うーむ glibc.info でわからないとなるとまずはこれくらいから?
エラー処理とか境界条件あたりはなにもしてませんが…
#include <stdio.h>
#include <iconv.h>
int
main(int argc, char *argv[])
{
char inbuf[BUFSIZ];
char outbuf[BUFSIZ];
iconv_t cd;
size_t nconv;
char *inptr, *outptr;
int insiz, outsiz;
cd = iconv_open("EUC-JP", "SHIFT-JIS"); /* SJIS -> EUC-JP */
if (cd == (iconv_t)-1) {
perror("iconv_open");
exit(1);
}
while (fgets(inbuf, sizeof(inbuf), stdin) != NULL) {
inptr = inbuf;
insiz = strlen(inbuf);
outptr = outbuf;
outsiz = sizeof(outbuf);
nconv = iconv(cd, &inptr, &insiz, &outptr, &outsiz);
/*
* inptr,insiz,outptr,outsiz は処理した分だけ移動/変化する。
* inbuf から inptr までがSHIFT-JISからEUC-JPに変換されて
* outbuf から outptr に設定される。
* nconv == -1 の時はエラーなのでそれなりに処理。
* errno でエラーの原因はわかる。詳しくはinfo参照
*/
*outptr = '\0';
printf("%s", outbuf);
}
iconv_close(cd);
exit(0);
}
--
鵜飼文敏