はじめまして、ホワイティーンと申します。
ファイル操作に関して質問させてください。
現在OPEN,CLOSEを使用し、ファイルを作成しています。
その保存形式をUTF-8で保存したいのですが、
ファイルモードをbinaryとするだけでよろしいのでしょうか?
初歩的な質問で申し訳ありませんが、
方法等ありましたら教えて頂きたいと思います。
よろしくお願いします。
VB6 以前ですか? .NET ですか?
それによってやり方はガラっと変わるので、まずはその点を明らかにしてください。
申し訳ございませんでした。
VB6.0になります。
以上、よろしくお願いします。
Open,Closeステートメントをやめて、
ADODB.StreamオブジェクトのCharSetを利用すると簡単に出来ます。
> Open,Closeステートメントをやめて、
が無理ならば MultiByteToWideChar&WideCharToMultiByte APIを使うのかなぁ?
ムチャクチャメンドそう。
それか、とりあえずShift-JISで保存してADODB.Streamオブジェクトでもう一度
開き、保存しなおすとか。
#回答ではありません
FileSystemObject でできるかと思ったら無理でした。
UTF-16 になっちゃった。
> が無理ならば MultiByteToWideChar&WideCharToMultiByte APIを使うのかなぁ?
をやってみました。
Private Declare Function WideCharToMultiByte Lib kernel32 _
(ByVal CodePage As Long, ByVal dwFlags As Long, lpWideCharStr As
Integer, ByVal cchWideChar As Long, _
lpMultiByteStr As Byte, ByVal cchMultiByte As Long, ByVal
lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_UTF8 = 65001
Public Function EncodeUTF8(ByVal strInput As String) As Byte()
Dim lngLength As Long ' 変換対象の文字数
Dim intIndex As Integer ' Unicodeコピー用
Dim intUniInput() As Integer ' 変換対象Unicode文字列バッファ
Dim lngSize As Long ' 変換後UTF8文字列バイト数
Dim bytUTF8Buff() As Byte ' 変換後UTF8文字列バッファ
Dim lngBuffSize As Long ' 文字列バッファ領域数
' 変換対象文字数を取得
lngLength = Len(strInput)
If lngLength = 0 Then Exit Function
' 変換対象文字列をUnicode文字列バッファにコピー
ReDim intUniInput(0 To lngLength - 1)
For intIndex = 0 To lngLength - 1 Step 1
intUniInput(intIndex) = AscW(Mid(strInput, intIndex + 1, 1))
Next intIndex
' 文字列バッファ領域を設定
lngBuffSize = lngLength * 3
' 変換後文字列バッファ領域の確保
ReDim bytUTF8Buff(lngBuffSize)
' Unicode文字列→UTF8文字列変換
lngSize = WideCharToMultiByte(CP_UTF8, 0, intUniInput(0), lngLength,
bytUTF8Buff(LBound(bytUTF8Buff)), _
lngBuffSize,
vbNullString, 0)
' 変換失敗の場合は終了
If lngSize = 0 Then Exit Function
' 不要な領域を開放
ReDim Preserve bytUTF8Buff(lngSize - 1)
EncodeUTF8 = bytUTF8Buff
End Function
これで、Binary で書き込めばできるかと。
やっぱり、面倒です罠。