- ベストアンサー
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); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
昔、iconvでうまく行かなかったときは、iconvを使用するのはやめて、nkfを使用しました。 nkfはソースもあり不具合が有れば、自分で修整すれば良いので以後は、すべてnkfを使用していました。 当時を思い出すと。。。「iconvは癖があり使い方が面倒で、いちいち調べるより、ソースが簡単だったのでnkfを利用した方が、時間的にも短かった」様な気がします。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
ギリシャ文字に「II」なんてないですよ~. ローマ数字の「II」 (を 1文字で書いたやつ) かな? こいつらは「使うべきでない文字」なのでねぇ. shift_jis ⇔ EUC の変換でこ~いう「変なやつ」も考慮するんだったら, iconv は使わず自力で変換した方がいいんじゃないかなぁ?
お礼
ご指摘ありがとうございます。 そういわれればローマ数字ですよね。 すいません。 問題については、一応、nkfをしようすることで対応できました。
お礼
助かりました。 nkfを追加して対応できました。 とりあえずこれでいけそうです。 ありがとうございました。