Unicode文字をバイナリでファイル入出力するには?

解決


じろう  2004-09-14 05:43:08  No: 85544

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になってしまうのでしょうか?


魔界の仮面弁士  2004-09-14 06:13:59  No: 85545

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


じろう  2004-09-14 19:44:35  No: 85546

バイナリ配列にデータを入れてファイル入出力する場合は、魔界の仮面弁士さん
が示していただいたように化けずに入出力できることが確認できました。
どうやら、String型にデータを入れて For Binatyで出力すると、
「?」のコード「&H3F」になってしまうようです。
(ShiftJISコードにない文字を出力する場合そうなってしまうのか
も知れません。)
Type宣言したユーザー定義型をそのままバイナリで保存したかったので、
string型の個所をByte配列に置き換えれば、文字化けせずにファイル
入出力できることがわかりましたので、その方法で行こうと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加