Wandelt einen ANSI-String in einen Unicode-String um
#include <WinAPIConv.au3>
_WinAPI_MultiByteToWideChar ( $vText [, $iCodePage = 0 [, $iFlags = 0 [, $bRetString = False]]] )
$vText | Text oder DllStruct der den umzuwandelnden Multibyte-Text enthält |
$iCodePage | [optional] Legt die Kodierungsseite für die Umwandlung fest: 0 - ANSI Kodierungsseite 1 - OEM Kodierungsseite 2 - Macintosh Kodierungsseite 3 - Die Windows ANSI Kodierungsseite für den aktuellen Thread 42 - Symbol-Kodierungsseite 65000 - UTF-7 65001 - UTF-8 |
$iFlags | [optional] Flags die den Konvertierungstyp bestimmen: $MB_PRECOMPOSED - Immer vor-zusammengesetzte Zeichen verwenden $MB_COMPOSITE - Immer zusammengesetzte Zeichen verwenden $MB_USEGLYPHCHARS - Verwendet Glyph-Zeichen anstelle von Steuerzeichen |
$bRetString | [optional] Flag welches anzeigt ob ein String oder eine DllStruct (Standard False: Structure) zurückgegeben werden soll |
Erfolg: | Text oder DllStruct der den umzuwandelnden Multibyte-Text enthält |
Fehler: | Setzt das @error Flag auf ungleich null. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten. |
Es wird keine Umwandlung von $vText in einen String vorgenommen, die Funktion schlägt mit @error = 1 fehl.
_WinAPI_MultiByteToWideCharEx, _WinAPI_WideCharToMultiByte
Suche nach MultiByteToWideChar in der MSDN Bibliothek.
#include <WinAPIConv.au3>
;~ Global Const $CP = 0 ; CP_ACP Standard Codepage
;~ Global Const $CP = GetACP() ; aktuelle Codepage
;~ Global Const $CP = 65001 ; UTF-8 sicherlich der beste Wert
Global Const $CP = 932 ; CP_SHIFT_JIS
Local $sText = "データのダウンロードに失敗しました。"
;~ Local $sText = "abcdefg 1234567890"
Local $sOutput = @TAB & @TAB & "Codepage =" & $CP & @CRLF & @CRLF
$sOutput &= @TAB & "String[" & StringLen($sText) & "] = " & $sText & @CRLF & @CRLF
; ============== _WinAPI_WideCharToMultiByte Test ==============
Local $sTest = _WinAPI_WideCharToMultiByte($sText, $CP, True, False)
$sOutput &= "WideChar in String (MultiByte)" & @TAB & VarGetType($sTest) & " " & StringLen($sTest) & " :" & @CRLF & $sTest & @CRLF & @CRLF
$sTest = _WinAPI_WideCharToMultiByte($sText, $CP, True, True)
$sOutput &= "WideChar in Binary" & @TAB & VarGetType($sTest) & " " & BinaryLen($sTest) & " :" & @CRLF & $sTest & @CRLF & @CRLF
; ============== _WinAPI_MultiByteToWideChar Test ==============
Local $sMultiByte = _WinAPI_WideCharToMultiByte($sText, $CP, True, False)
$sOutput &= @CRLF & @TAB & "MultiByte[" & StringLen($sMultiByte) & "] = " & $sMultiByte & @CRLF & @CRLF
Local $tStruct = _WinAPI_MultiByteToWideChar($sMultiByte, $CP, 0, False)
$sOutput &= "MultiByte in Struct" & @TAB & @TAB & VarGetType($tStruct) & " " & DllStructGetSize($tStruct) & " :" & @CRLF & DllStructGetData($tStruct, 1) & @CRLF & @CRLF
$sTest = _WinAPI_MultiByteToWideChar($sMultiByte, $CP, 0, True)
$sOutput &= "MultiByte in String" & @TAB & VarGetType($sTest) & " " & StringLen($sTest) & " :" & @CRLF & $sTest & @CRLF & @CRLF
Local $iMB_TYPE = 0
If $sTest == $sText Then
$sOutput &= @CRLF & @TAB & @TAB & "Konvertierung OK"
Else
$sOutput &= @CRLF & @TAB & @TAB & " !!! Fehler bei der Konvertierung !!!"
$iMB_TYPE = $MB_ICONERROR
EndIf
MsgBox($MB_SYSTEMMODAL + $iMB_TYPE, "Ergebnisse", $sOutput)
Func GetACP()
Local $aResult = DllCall("kernel32.dll", "int", "GetACP")
If @error Or Not $aResult[0] Then Return SetError(@error + 20, @extended, "")
Return $aResult[0]
EndFunc ;==>GetACP