• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BASP21のKconvについて)

BASP21のKconvについて

このQ&Aのポイント
  • BASP21のKconv関数を利用して、SJISからEUCへの変換はできるが、EUCからSJISへの変換ができない問題が発生しています。
  • サンプルコードを使用して、EUCからSJISへの変換が行われていますが、メッセージの一部が「ノヤフタ」、「??」となってしまう問題が発生しています。
  • 値の渡し方などに問題があるのか、解決方法をご教授ください。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

Kconvメソッドの使い方間違ってますね。 http://www.hi-ho.ne.jp/babaq/basp21.html#0030 文字列を指定していいのはINもOUTもUNICODE文字列だけです。 それ以外はバイト配列と書いてありますが。 ちなみにここでいうバイト型配列は、COMなんでSAFEARRAYです。 SafeArrayAccessData()、 SafeArrayUnaccessData()を使う必要があります。 もちろん渡すほうもSAFEARRAYである必要があります。 SAFEARRAYの使い方は以下のurlを参照。 http://www.ops.dti.ne.jp/~allergy/com/com.html ちなみに、 >strSJIS = "不明"; ですが、意識してないと思いますがUNICODE文字列に変換されてstrSJISに文字列が格納されています。 なので、SJIS→EUCはうまくいったように見えてますが実際にはUNICODE→EUCをしてることになります。 なお、最終的にファイルに出力するんでしたらADO.Streamを使えば楽だと思いますけど。これならSAFEARRAYなんて出てきませんし。

kazeen
質問者

お礼

丁寧に解説頂き、ありがとうございました。 アドバイスを元に作成してみます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>やはり同じような感じです。 何を使ってどうやって確認してるんですか? EUCが何かをわかってないとしか思えないんですけど。

kazeen
質問者

補足

おっしゃるとおり、あまりEUCがわかっておりません。 だた、どうしてもEUCをSJISに変換する必要にせまっており、安易にBASP21を利用しようと思ったのですが、うまく変換されないようなので使用方法を模索すべく、サンプルを作成しました。 strSJIS = "不明"; strEUC = pIBasp21->Kconv(strSJIS, 2, 1); sprintf(str, "%s\0", strEUC.copy()); とし、str部分をファイル出力した場合、そのファイル をEUCで開くと、"不明"と表示され、EUC変換されているように思われるのでが、 strSJIS = "不明"; strEUC = pIBasp21->Kconv(strSJIS, 2, 1); strSJIS = pIBasp21->Kconv(strEUC, 1, 2); sprintf(str, "%s\0", strSJIS .copy()); とし、str部分をファイル出力した場合、そのファイル をSJISで開くと、文字化けしてしまいます。 ですので、やり方が間違っていると思い、質問した次第です。 以上、よろしくお願いします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

根本的なことですが、確認方法が間違ってます。 EUCの文字コードの文字列をMessageBoxで表示できるわけがないんですが。 ファイルに出力して、EUCを認識できるエディタ等で内容を確認してください。

kazeen
質問者

補足

ご回答ありがとうございます。 確認方法をファイル出力に変えてみましたが、 やはり同じような感じです。 以上、よろしくお願いします。

関連するQ&A