gccでiconvを使った文字コード変換で文字化け?
Linuxでgccを使ってプログラムを作っていますが、文字コード変換が一部分うまくいかなくて困ってます。
Shift-JISで作られたテキストファイルから一行ずつ文字を読み込んで、
それをUTF-8に変換して画面に出力しているんですが、
「神石高原町」だけ文字化けしているのか、表示されません。
前後の行は表示されるのでちょうど1行空白になる感じです。
とりあえず変換用に作った関数。
BOOL SJIStoUTF(
char* pin, // (IN) 変換元文字列
char* pout, // (OUT) 変換後文字列格納領域
size_t olen) // (IN) 変換後文字列格納領域サイズ
{
iconv_t cd;
size_t ilen, rlen;
cd = iconv_open( "UTF-8", "SJIS-WIN" );
ilen = strlen( pin );
rlen = iconv(cd, &pin, &ilen, &pout, &olen );
if( rlen == -1 ){
printf( "ERROR in S2U (%s)\n", pin );
return FALSE;
}
*pout = '\0';
iconv_close( cd );
return TRUE;
}
この関数に「神石高原町」を与えて返ってきた文字をファイルに出力して、
秀丸の文字コードUTF-8で開くと変換できなかった文字が「神」の前にあり、文字も「神石高原」になるし・・・。
Linuxのコンソール上でiconvのコマンド使ってファイルごと変換すれば
文字化けしないんですけど、
gccでiconv使うときは気をつけなきゃだめなことがあるんでしょうか?
なんでこうなるのかわかる方がいたら教えてください。
お礼
ありがとうございます。そうですか・・・、そのような仕組があるのですね ・・。勉強になりました。