[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