Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: clicker_student on May 22, 2019, 09:36:36 PM

Title: Print + #logfile = непонятная кодировка
Post by: clicker_student on May 22, 2019, 09:36:36 PM
Открыл для себя, что функция Print может писать в log.txt, если включить #logfile. До этого я писал с помощью TFWRITE()
Но получил странный результат. Код
Code: (clickermann) [Select]
#logfile
//--- поищем меню "Свойства"
$property_menu_hwnd = WNDFIND("Свойства")
IF($property_menu_hwnd != 0)
$message = STRCONCAT("Меню 'Свойства' найдено, hwnd=",$property_menu_hwnd)
TFWRITE("log.txt",$message)
PRINT($message, "Print")
Print("Меню 'Свойства' найдено, hwnd=",$property_menu_hwnd, "Print 2")
END_IF

Содержимое лога
Code: (php) [Select]
Меню 'Свойства' найдено, hwnd=1705966
09:34:45 PM .���� '��������' �������, hwnd=1705966Print
09:34:45 PM ���� '��������' �������, hwnd=1705966Print 2


Искал на форуме - не нашел, чтобы кто-то спрашивал. В какой кодировке он пишет?
Title: Re: Print + #logfile = непонятная кодировка
Post by: clicker_student on May 23, 2019, 12:21:37 AM
 В справке написано, что LOGWRITE  и PRINT - синонимы. Хорошо, проверю
Title: Re: Print + #logfile = непонятная кодировка
Post by: dramster on May 23, 2019, 06:53:43 AM
Команда print пишет в лог файл по старинке в кодировке Win-1251. Но в момент использования прямой записи с помощью TFWRITE - в начало файло записываетсся BOM - маркер последовательности байтов, в нашем случае utf-8 (EF BB BF). Он и портит все остальное.

Но только кое что и мне не понять, покажу на рисунке.
Для начала создадим файл с помощью такого скрипта.
Code: (clickermann) [Select]
#logfile
print("тест")
TFWRITE("log.txt","тест")
print("тест")
halt

Потом побайтово глянем на него:
Code: (clickermann) [Select]
FREADDATA ("log.txt", $arr)

FOR($a=0,$a<arrsize($arr))
   print($arr[$a])
END_CYC

halt

(https://i.imgur.com/4bJpemU.png)
Title: Re: Print + #logfile = непонятная кодировка
Post by: Oraven on May 23, 2019, 07:43:29 AM
В справке написано, что LOGWRITE  и PRINT - синонимы. Хорошо, проверю

LOGWRITE и PRINT одно и тоже. Запись производится в ANSI кодировке
TFWRITE пишет в UTF-8 из за чего в файле смешиваются две кодировки.
Title: Re: Print + #logfile = непонятная кодировка
Post by: clicker_student on May 23, 2019, 08:49:51 PM
А есть ли возможность писать PRINT в UTF-8?
Или просто нельзя смешивать потоки вывода? Но с  другой стороны, читать логи в ANSI с веба не получится - будет кракозябра?
Проверил - все нормально.
Title: Re: Print + #logfile = непонятная кодировка
Post by: Johnny on May 24, 2019, 04:37:43 PM
исправим в будущем, приведем все к UTF8
Title: Re: Print + #logfile = непонятная кодировка
Post by: clicker_student on May 24, 2019, 07:21:26 PM
Спасибо!
Title: Re: Print + #logfile = непонятная кодировка
Post by: clicker_student on June 05, 2019, 07:09:47 PM
Но с  другой стороны, читать логи в ANSI с веба не получится - будет кракозябра?
Проверил - все нормально.
Нормально - есои стоит винда русская. Но в принципе, переключением кодировки в браузере лог становится читаемым.