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