みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

iconv_open失敗

いつもお世話になっております。
OpenIndiana
NetBeansIDE 7.1でc++のプログラミングをしているのですが、下記コードで
SHIFT-JISを指定すると
iconv open: Invalid argument
となってしまいます。

SHIFT-JISの文字コード関係の何かのインストール等が不足しているのでしょうか。
locale -a
というコマンドを実行してみたのですが、
UTF-8に関係しそうなものは入っていたのですが、SHIFT-JIS(PCK?)
のようなものは入ってなさそうでした。

どなたかご教授よろしくお願いいたします。


どなたかご教授よろしくお願いいたします。

int main(int argc, char** argv) {

int ret;

// ret = convert("UTF-8", "EUC-JP",//成功
// ret = convert("UTF-8", "SHIFT_JIS",
ret = convert("UTF-8", "SHIFT-JIS",
"日本語テストメッセージおはよう",
outbuf, sizeof(outbuf));
if (ret) {
printf("%s\n", outbuf);
}
else {
printf("Oops!\n");
}
return 0;
}

int convert(char const *src,
char const *dest,
char const *text,
char *buf,
size_t bufsize)
{
iconv_t cd;
size_t srclen, destlen;
size_t ret;

cd = iconv_open(dest, src);
if (cd == (iconv_t)-1) {
perror("iconv open");
return 0;
}

srclen = strlen(text);
destlen = bufsize - 1;
memset(buf, '\0', bufsize);

ret = iconv(cd, &text, &srclen, &buf, &destlen);
if (ret == -1) {
perror("iconv");
return 0;
}

iconv_close(cd);
return 1;
}

投稿日時 - 2012-03-11 23:31:13

QNo.7356844

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

> locale -a
は関係ないでしょう。iconvが対応しているエンコードを調べるなら
iconv -l
です。

とりあえず、いろいろと直すところはありましたが、手許の環境ではSHIFT-JISで変換できています。

投稿日時 - 2012-03-12 00:42:51

補足

ご返答ありがとうございます。

iconv -l
で調べてみたところSHIFT-JISがなさそうだったので、パッケージマネージャーで
iconv/extra
をインストールして、再度確認したところ、
PCK (PCK, SJIS, Shift_JIS, SHIFT-JIS, ShiftJIS), PTCP154 (PTCP154), SJIS,
という表示がでてきました。
しかし、
iconv open: Invalid argument

は相変わらず発生しています。何か不足があるのでしょうか。

投稿日時 - 2012-03-12 22:40:32

あなたにオススメの質問