- ベストアンサー
文字コード(EUC->SJIS)についての質問です
どこに質問して良いのか判断しかねましたので、 今回の開発環境であるVBのカテゴリで質問させていただきます。 さて早速質問ですが、EUC->SJISについてです。 現在あるフリーの.DLLを使ってコード変換をしているのですが、 ある特定の場合に限り、自分の期待通りの結果を返してくれません。 例えば以下のような場合(説明のためアレンジして抜粋)です。 ------------------------------------------------------------------ Dim Euc(6) As Byte Dim Sjis() As Byte Dim szSjis As Integer 'Sjis()のサイズ Euc(0) = 13 Euc(1) = 10 Euc(2) = 13 Euc(3) = 0 Euc(4) = 46 Euc(5) = 0 szSjis = Euc2Sjis(Euc(), Sjis()) '今回使用しているDLL内の関数 ------------------------------------------------------------------ この結果、変換後の値は以下のようになります。 szSjis → 3 Sjis(0) → 13 Sjis(1) → 10 Sjis(2) → 13 このようになり後半が無視されてしまっているような気がするのです。 私が期待している結果としては、46(&H2E)の"."が残ってほしいのですが…。 Euc(4)=0やEuc(6)=0がなにか悪さをしているのでしょうか? 日本語文字コードの知識に乏しいので、的外れな質問かもしれませんが、 このような分野にお詳しい方がいらっしゃいましたら、 どうかアドバイスよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ソースを見てみるとEuc2Sjis()には変換データ長を通知する手段が無いようです。 C/C++言語では&H00を「文字列データの終了」とする文化があります。 その文化に準拠するDLLならこのような状況になるでしょう。
その他の回答 (1)
通常コード変換の際にNullコードを終了コードとしますので、データ変換する際に、Euc(0)から順番にNullコードが出るまでループしてるんじゃないでしょうか? 文字コード変換という事ですが、データとしての&H00が必要なんでしょうか? 通常は、あまり使わないんですが。
お礼
アドバイスどうもありがとうございました。 データはTELNET接続先から帰ってきた生のデータです。 データとして&H00が必要というわけではなかったのですが、 日本語文字コードについてまったく知識がなかったため、 2バイトだったら&H00も意味があるコードなのかも?なんて思っておりました。 もうすこし、それぞれの意味や仕組みを意識していかないといけませんね。 このたびは本当にありがとうございました。
お礼
早速のお返事・アドバイスありがとうございます。 C/C++のことなんて、考えてもみませんでした。\0のことですね。 (実はこれでもC/C++を使っていたりします…) もっと柔軟な思考で対処しなければいけませんね。 大変参考になりました。 ほんとうにありがとうございました。