英語OSと日本語OSでの文字変換の違い


??  2009-12-10 01:02:54  No: 102116  IP: [192.*.*.*]

VB6.0  SP6

ある装置が文字列データをシリアルで送信してくるので、
それを受信して表示するソフトを作成しています。

文字の変換に関しては、
2バイト文字:StrConv()
1バイト文字:Chr()
を使用しています。
装置から送られてくる文字列データは、英語OS日本語OS関係なくJISです。
日本語OSでは問題ないのですが、英語OSだと文字が正しく表示できなかったり
データの取りこぼしをしているようにみえます。

VB6.0の質問ではないかもしれませんが、わかる範囲でご教授願います。
1.OSによって、StrConvやChr()の動作が変わってしまうのでしょうか。
2.例えばデータの受信に失敗していて、文章の途中でNULLが含まれる文字をリストボックスに表示しようとしたら、NULLより前の文字列しか表示しないものでしょうか。

よろしくお願いします。

編集    削除
オショウ  2009-12-10 04:08:12  No: 102117  IP: [192.*.*.*]

それはある意味、無茶苦茶な・・・

まず、英語OSには、日本語パック入れてます?
そうしないと、日本語の表示はできません。

次に日本版VB6で作ったものを英語OSで動作させました?
日本語版VB6のランタイムには、日本語用のDLLがありますので
それが無いと正常に動作しません。

あと最終的に日本語版VB6で作られたEXEを英語版OS上で動作
させることになってますが、動作保障されてません。

質問の・・・
1. 動作が変わる以前の話です。
2. NULLは、基本的に区切り文字なので、仕様です。
   空白に置換しないとやりたいことはできないようですネ!

英語版VB6で同じことができるようなプログラムを作るか・・・
VB.NETで作り直し、通信機能はバイナリで行い、表示部分で
OSの差異を吸収するような作りにしないと、納品物としては
どうかと・・・(仕事の話でしょう?  遊びじゃ〜ないよネ?)

以上。

編集    削除
オショウ  2009-12-10 04:08:48  No: 102118  IP: [192.*.*.*]

追伸・・・

OSは、何でしょう?
WinXP?

以上。

編集    削除
魔界の仮面弁士  2009-12-10 05:08:30  No: 102119  IP: [192.*.*.*]

> 1.OSによって、StrConvやChr()の動作が変わってしまうのでしょうか。
その動作は、既定の文字コードに依存しています。

この動作を変更するため、StrConv には第三引数が用意されています。
日本語であれば、&H411 を指定します。

また、Chr/Asc も言語に依存します(ChrB/AscB は影響を受けません)。
Shift_JIS 相当の変換が必要なら、StrConv の第3引数に &H411 を指定して
vbFromUnicode/vbUnicode を使うと、Byte()/String の相互変換が
可能ですので、これで代用することができます。


> 2.例えばデータの受信に失敗していて、文章の途中でNULLが含まれる文字をリストボックスに表示しようとしたら、
TextBox や ListBox は、vbNullChar 以降の文字列を表示できません。
別の文字に置き換えるなどの対処が必要ですね。


> 2バイト文字:StrConv()
> 1バイト文字:Chr()
1 バイト文字への変換に StrConv を使うことも出来ますし、
2 バイト文字への変換に Chr を使うことも出来ますよ。

Dim B(1) As Byte

B(0) = &H41
B(1) = &H42
MsgBox StrConv(B, vbUnicode, &H411), , "SJIS: 41,42"
MsgBox Chr(B(0)) & Chr(B(1)), , "SJIS: 41,42"

B(0) = &H82
B(1) = &HA0
MsgBox StrConv(B, vbUnicode, &H411), , "SJIS: 82A0"
MsgBox Chr(B(0) * &H100& + B(1)), , "SJIS: 82A0"

編集    削除