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