重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

Linux 上で以下のようなプログラム(文字コードのEUC/SJIS変換)を実行すると「II」が変換できず(正確にはNULLになってしまう。)に文字列が破壊されてしまいます。

実際使用するデータの中には「II」が存在するので、この文字(ギリシャ文字全部?その他にもありますかね?)を使用不可とするのは難しいので、上手く変換できるようにしたいのですが、iconv_openの代わりになる関数(あるいは上手く変換させる方法)ってありませんか?

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

int main(int ac,char **av){
int desc = 0;
char r[512];
char w[512];
char *rr;
char *ww;
rr = r;
ww = w;
int a,b;
a = 256;
b = 256;
if((desc = iconv_open( "SHIFT-JIS", "EUC-JP" )) != -1){
strcpy(r,"aIIa\n");
iconv(desc,&rr,&a,&ww,&b);
printf("%s\n",w);
}
}

A 回答 (2件)

昔、iconvでうまく行かなかったときは、iconvを使用するのはやめて、nkfを使用しました。


nkfはソースもあり不具合が有れば、自分で修整すれば良いので以後は、すべてnkfを使用していました。
当時を思い出すと。。。「iconvは癖があり使い方が面倒で、いちいち調べるより、ソースが簡単だったのでnkfを利用した方が、時間的にも短かった」様な気がします。

参考URL:http://sourceforge.jp/projects/nkf/
    • good
    • 0
この回答へのお礼

助かりました。
nkfを追加して対応できました。
とりあえずこれでいけそうです。
ありがとうございました。

お礼日時:2006/05/19 18:29

ギリシャ文字に「II」なんてないですよ~. ローマ数字の「II」 (を 1文字で書いたやつ) かな?


こいつらは「使うべきでない文字」なのでねぇ. shift_jis ⇔ EUC の変換でこ~いう「変なやつ」も考慮するんだったら, iconv は使わず自力で変換した方がいいんじゃないかなぁ?
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
そういわれればローマ数字ですよね。
すいません。

問題については、一応、nkfをしようすることで対応できました。

お礼日時:2006/05/19 18:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!