- 締切済み
VB6.0でのバイナリデータの扱いについて
文字コードについて 現在ハンディターミナルとPCとの通信を行うプログラム(VB6.0)を作成しています。 プログラムの一部で下のような記述があります。 ------------------ BCC = Chr(aa) ------------------ 変数aaには数字の226が入り、変数BCCには226に該当する文字列が格納されるはずですが、BCCには文字化けした文字が入り困っています。 調べた結果VB6.0は文字列をunicodeとして扱い、その結果内部的な文字列変換が理由で、文字コード上に存在しない幾つかのバイナリデータは、Chr関数で扱えないというところまではわかりました。 そこでChr命令をChrB命令に変更しましたが、求めている答えが返ってきませんでした。 文字コード表では"DF"までは存在しますが、それ以降の文字は存在しないため扱うのは無理なのでしょうか? StrConvなどを使用すれば可能なのかどうか等考えているのですがわからない状況です。 どなたかご教授願えないでしょうか。宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- dee_honda
- ベストアンサー率53% (26/49)
String型は、Unicode(UTF-16)でデータが入ってくることが前提なので、 String型に対してChrB()、Chr()で非Unicode文字をセットしても解決にはなりません。 バイナリーデータは、String型は一切使用せずにバイト型配列で処理するのが基本です。 >BCCをbyte型とした場合、 >今度は問題なかった文字コードが文字化けする事や、 >かえってくる文字列がかわるような事はありませんか? たとえ偶然であっても、他のうまくいっているString型の変数は、いじる必要はないわけですが、 もしBCCという変数で、その他のうまくいっている文字列を同時に扱っているのであればそうなるかもしれません。 (いままで暗黙のうちにUnicode⇔SJIS変換を行ってくれていた部分 を自前で処理する必要があります) 具体的には、 バイト型配列 = StrConv(String型変数, vbFromUnicode) String型変数 = StrConv(バイト型配列, vbUnicode) のような処理が必要でしょう。
- o_chi_chi
- ベストアンサー率45% (131/287)
変数aaをByte型で宣言すればいいような気がしますが。
- bin-chan
- ベストアンサー率33% (1403/4213)
> 求めている答えが返ってきませんでした。 BCCという変数は何型で宣言していますか? Byte にしていますか?
補足
早速の回答有難うございます。 変数BCCはSTRINGで宣言しています。 変数aaが226の場合以外は問題なくBCCに正常な文字列がかえってきますが、やはりunicodeで扱っていない文字コードの場合は文字化けするのでしょうか? BCCをbyte型とした場合、今度は問題なかった文字コードが文字化けする事や、かえってくる文字列がかわるような事はありませんか?
お礼
ご回答有難うございます。 私の力不足もあり未だ問題解決に至っておりません。 そこで新しくまた質問させていただきます。申し訳ありません。