Windows2000、VB6.0
上の環境で、中国語で入力された文字をファイルにバイナリで
落とそうとしています。
例えば(中国語簡体字の)「謝」はUnicode「22 8C」で入力されるのですが
ファイルに落とすと「3F 00」で保存されてしまいます。
ソースは下のように書いています。
fno = FreeFile
fPath = "D:\Work\Data.dat"
Open fPath For Binary Access Write As fno
Put fno, , rData
Close fno
FileSystemObjectを使えばテキストでUnicodeで保存できることは
確認しているのですが、なんとかバイナリで落とす方法はないか
調べています。
上の方法では、保存するときにShiftJISになってしまうのでしょうか?
For Binaryで出力しているなら、化けるとは思えませんが…。
少なくとも当方では、下記のコードで UTF-16 な『謝』を出力できました。
Dim FNo As Integer
Dim fPath As String
Dim rData() As Byte
FNo = FreeFile()
fPath = "C:\Data.dat"
rData = ChrW(&H8C22)
Open fPath For Binary Access Write As #FNo
Put #FNo, , rData
Close #FNo
バイナリ配列にデータを入れてファイル入出力する場合は、魔界の仮面弁士さん
が示していただいたように化けずに入出力できることが確認できました。
どうやら、String型にデータを入れて For Binatyで出力すると、
「?」のコード「&H3F」になってしまうようです。
(ShiftJISコードにない文字を出力する場合そうなってしまうのか
も知れません。)
Type宣言したユーザー定義型をそのままバイナリで保存したかったので、
string型の個所をByte配列に置き換えれば、文字化けせずにファイル
入出力できることがわかりましたので、その方法で行こうと思います。
ありがとうございました。
ツイート | ![]() |