• ベストアンサー

iconv_openで「II」(ギリシャ文字)を変換できない

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); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • amru05
  • ベストアンサー率63% (33/52)
回答No.1

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

参考URL:
http://sourceforge.jp/projects/nkf/
ari_els
質問者

お礼

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

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ギリシャ文字に「II」なんてないですよ~. ローマ数字の「II」 (を 1文字で書いたやつ) かな? こいつらは「使うべきでない文字」なのでねぇ. shift_jis ⇔ EUC の変換でこ~いう「変なやつ」も考慮するんだったら, iconv は使わず自力で変換した方がいいんじゃないかなぁ?

ari_els
質問者

お礼

ご指摘ありがとうございます。 そういわれればローマ数字ですよね。 すいません。 問題については、一応、nkfをしようすることで対応できました。

関連するQ&A