Цитата Creat0R:
Прикрепляю реальный пример, вывод в гуи, нормально »
|
как я себе представляю вывод в юникоде:
Код:

#include <A3LConstants.au3>
; ...
; Это кусок скрипта между "Case $Get_Button" и "EndSwitch"
GUICtrlSetData($StatusLabel, "Please wait...")
$VNameUTF8 = GetName("fQyYG-1nhMA") ;Это видео ролик с YouTube (имя ролика на иврите)
$VNameUTF16= _Utf8ToUnicode($VNameUTF8) ; Возвращает тип BINARY
$struUTF16 = DllStructCreate("byte["&BinaryLen($VNameUTF16)&"];byte[2]") ; Структура для UTF-16
DllStructSetData($struUTF16, 1, $VNameUTF16) ; Заполняем структуру
GUICtrlSendMsg($Data_Input, $WM_SETTEXT, 0, DllStructGetPtr($struUTF16)) ; Устанавливаем текст контрола
WriteToLog("Video Name: [" & $VNameUTF8 & "] and data")
GUICtrlSetData($StatusLabel, "")
; ...
; Функция возвращает тип BINARY
Func _Utf8ToUnicode($UTF8String)
Local $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, _
"int", 0, _
"str", $UTF8String, _
"int", -1, _
"ptr", 0, _
"int", 0)
Local $buf = DllStructCreate("byte[" & $ret[0]*2 & "]")
$ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, _
"int", 0, _
"str", $UTF8String, _
"int", -1, _
"ptr", DllStructGetPtr($buf), _
"int", $ret[0])
Return DllStructGetData($buf, 1)
EndFunc
Цитата Creat0R:
запись в файл - не нормально »
|
хм, сигнатура должна быть всего одна в начале файла, а у тебя добавляется перед каждой строкой... поэтому лучше не доверять AutoIT и сделать все самому, типа:
Код:

Func WriteToLog($Line)
Local $hLogFile, $Log_File = StringTrimRight(@ScriptFullPath, 3) & "log"
Local $GetDateTime = @HOUR & ":" & @MIN & ":" & @SEC & ", " & @MDAY & "/" & @MON & "/" & @YEAR
If Not FileExists($Log_File) Then
$hLogFile = FileOpen($Log_File, 17)
FileWrite($Log_File, chr(0xEF) & chr(0xBB) & chr(0xBF) & _
"========================================================================" & @CRLF & _
"Log File for <" & @ScriptName & "> started at: " & $GetDateTime & @CRLF & _
"========================================================================" & @CRLF & @CRLF)
Else
$hLogFile = FileOpen($Log_File, 17)
EndIf
FileWrite($hLogFile, StringToBinary("[" & $GetDateTime & "]" & @CRLF,4))
FileWrite($hLogFile, StringToBinary(">> ",4) & Binary($Line) & StringToBinary(@CRLF & @CRLF,4))
FileClose($hLogFile)
EndFunc