掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24005

UTF-8→SJIS変換
投稿者---UTF(2005/11/08 15:50:59)


お世話になります。
文字列をUTF-8からSJISに変換したいのですが、なかなかうまくいきません。
何方がご存知でしたら、助言を頂けたら、幸いです。
よろしくお願い申し上げます。

<PRE>
-------------------------------------------------------------------
#include <stdio.h>
#include <iconv.h>

utf8tosjis( inbuf, outbuf, outlen )
char *inbuf ;
char *outbuf ;
size_t *outlen ;
{
int r = 0 ;
char *inp ;
char *outp ;
size_t inlen ;
iconv_t ip ;

if(( ip = iconv_open( "SJIS", "UTF-8" )) != (iconv_t)-1 ) {
inp = inbuf ;
outp = outbuf ;
inlen = (size_t)strlen( inbuf ) ;
iconv( ip, &inp, &inlen, &outp, outlen ) ;

iconv_close( ip ) ;
} else {
r = -1 ;
}
return( r ) ;
}
-------------------------------------------------------------------
</PRE>


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:UTF-8→SJIS変換 24006 Blue 2005/11/08 15:58:45
<子記事> Re:UTF-8→SJIS変換 24016 si 2005/11/08 19:08:43


No.24006

Re:UTF-8→SJIS変換
投稿者---Blue(2005/11/08 15:58:45)


解答ではないです。

まず、環境を明示してください。
ソースを見る限り、古い形式(?)で書かれているようですけど。
# iconv.hが何か知らない。。。


ソースを載せるときは、preタグで囲うだけではダメです。
ソース中の > 等も関連しますので、HTML変換ツールで変換してください。
そして、レスする前に必ず確認画面で確認してください。



この投稿にコメントする

削除パスワード

No.24016

Re:UTF-8→SJIS変換
投稿者---si(2005/11/08 19:08:43)


私が以前、ネットで探したサンプルです。
出処は忘れましたが、掲示しても問題ないと思われますので
参考にどうぞ
動作確認は、Linux、gcc3 で行っております。
// utoj.c :  usage  utoj < infile > outfile

#include <iconv.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
/*
iconv_t iconv_open(const char *tocode, const char *fromcode);
        iconv のセットアップ、from から to へ文字コードを変換する
        サポートされている文字コードは、コマンドラインから
        $ iconv --list
        で確認出来る。

size_t iconv(iconv_t cd,char **inbuf, size_t *inbytesleft,
                                char **outbuf, size_t *outbytesleft);
        戻り値 : 変換された文字数、エラーは -1 (errno がセットされる)
        inbuf : 変換文字の入った文字列、inbytesleft : inbufから読み込むバイト数
        outbuf : 変換した文字列を入れるバッファ、outbytesleft : 変換後の最大バイト数
        ※ inbuf,inbyteleft,outbuf,outbyteleft は処理した分だけ移動/変化する。
        
int iconv_close(iconv_t cd);
*/
#define BUF_SIZE        1024

// UTF-8 ファイルを JIS へ変換する  
int main(int argc,char **argv)
{
        char inbuf[BUF_SIZE];
        char outbuf[BUF_SIZE];
        char *pin,*pout;
        size_t ilen,olen,rlen;
        iconv_t cd;
        
        cd = iconv_open("ISO-2022-JP","UTF-8");
        if ( cd < 0) {
                printf("%s\n",strerror(errno));
                return 1;
        }
        while (fgets(inbuf, sizeof(inbuf), stdin) != NULL) {
                pin = inbuf;
                ilen = strlen(inbuf);
                pout = outbuf;
                olen = sizeof(outbuf);
                rlen = iconv(cd, &pin, &ilen, &pout, &olen);
                if ( rlen < 0) { // error行は出力スキップ、標準エラーへ
                        perror(strerror(errno));
                        perror("\n");
                        perror(inbuf);
                        perror("\n");
                } else {
                        *pout = '\0';
                        printf("%s",outbuf);
                }
        }
        iconv_close(cd);
        return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧