保存形式をUTF-8にしたい – プログラミング – Home

保存形式をUTF-8にしたい
 
通知
すべてクリア

保存形式をUTF-8にしたい


ホワイティーン
 ホワイティーン
(@ホワイティーン)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

はじめまして、ホワイティーンと申します。

ファイル操作に関して質問させてください。
現在OPEN,CLOSEを使用し、ファイルを作成しています。

その保存形式をUTF-8で保存したいのですが、
ファイルモードをbinaryとするだけでよろしいのでしょうか?

初歩的な質問で申し訳ありませんが、
方法等ありましたら教えて頂きたいと思います。

よろしくお願いします。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

VB6 以前ですか? .NET ですか?
それによってやり方はガラっと変わるので、まずはその点を明らかにしてください。


返信引用
ホワイティーン
 ホワイティーン
(@ホワイティーン)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

申し訳ございませんでした。

VB6.0になります。

以上、よろしくお願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

Open,Closeステートメントをやめて、
ADODB.StreamオブジェクトのCharSetを利用すると簡単に出来ます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> Open,Closeステートメントをやめて、
が無理ならば MultiByteToWideChar&WideCharToMultiByte APIを使うのかなぁ?
ムチャクチャメンドそう。

それか、とりあえずShift-JISで保存してADODB.Streamオブジェクトでもう一度
開き、保存しなおすとか。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

#回答ではありません

FileSystemObject でできるかと思ったら無理でした。
UTF-16 になっちゃった。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> が無理ならば 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 で書き込めばできるかと。
やっぱり、面倒です罠。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました