ANSI文字列をUnicode文字列に変換 <TOP>
ANSI(1バイトASCII文字、2バイトマルチバイト文字:漢字)文字列を、全て2バイトで表現するUnicode文字列に変換します。
DoFileDownload ファイルのダウンロードを呼び出す
MultiByteToWideChar ANSI文字列をUnicode文字列に変換
VisualBasicでのStrConv(ANSI文字列, vbUnicode)をAPIで実行します。保存された文字列をTeraPadで読み込み表示させています。
全て半角英数の場合
ダンプで見てみる
漢字が含まれている場合
DoFileDownloadを実行すると、VisualBasicでは図のダイアログが表示されますが、F-Basicでは対応していないのか、下記の警告メッセージが表示されます。
'================================================================ '= ANSI文字列をUniCode文字列に変換
'= (MultiByteToWideChar.bas) '================================================================ #include "Windows.bi" ' ファイルのダウンロード Declare Function Api_DoFileDownload& Lib "shdocvw" Alias "DoFileDownload" (ByVal lpszFile$) ' ANSI文字列をUnicode文字列に変換 Declare Function Api_MultiByteToWideChar& Lib "Kernel32" Alias "MultiByteToWideChar" (ByVal CodePage&, ByVal dwFlags&, ByVal lpMultiByteStr$, ByVal cchMultiByte&, ByVal lpWideCharStr$, ByVal cchWideChar&) '* CodePage ANSI code page '* dwFlags 既定の変換方法 '* lpMultiByteStr 変換元文字列 '* cchMultiByte 変換元文字列サイズ(バイト数で指定:-1指定で自動計算) '* lpWideCharStr 変換先バッファ '* cchWideChar 変換先バッファサイズ(文字数で指定:0指定で必要なバッファサイズを返す) #define CP_ACP 0 'ANSIコードページ #define CP_MACCP 2 'Macintoshコードページ #define CP_OEMCP 1 'OEMコードページ #define CP_SYMBOL 42 'シンボルコードページ(Windows2000・XP) #define CP_THREAD_ACP 3 '呼び出しスレッドのANSIコードページ(Windows2000・XP) #define CP_UTF7 65000 'UTF-7を使用して変換(Windows98・Me・NT4.0以降) #define CP_UTF8 65001 'UTF-8を使用して変換(Windows98・Me・NT4.0以降)これを指定した場合、dwFlagsパラメータは0 Var Shared Edit1 As Object
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Buff As String '元の文字列 Var wBuff As String '変換先文字列 Var wBufflen As Long '変換先文字数 Var Ret As Long Buff = String$(256, Chr$(0)) Buff = Edit1.GetWindowText wBuff = String$(256, Chr$(0)) '必要なバッファサイズを取得 wBufflen = Api_MultiByteToWideChar(CP_ACP, 0, Buff, -1, wBuff, 0) Ret = Api_MultiByteToWideChar(CP_ACP, 0, Buff, -1, wBuff, wBufflen) wBuff = Left$(wBuff, (wBufflen - 1) * 2) Ret = Api_DoFileDownload(wBuff) 'バイナリダンプで確認の為ファイルに保存 Open "test.txt" For BinIO As #1 FWrite #1, Buff FWrite #1, wBuff Close End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End