Author Topic: Print + #logfile = непонятная кодировка  (Read 3321 times)

0 Members and 1 Guest are viewing this topic.

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Открыл для себя, что функция 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


Искал на форуме - не нашел, чтобы кто-то спрашивал. В какой кодировке он пишет?
« Last Edit: May 22, 2019, 09:43:05 PM by clicker_student »

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #1 on: May 23, 2019, 12:21:37 AM »
 В справке написано, что LOGWRITE  и PRINT - синонимы. Хорошо, проверю

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #2 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


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #3 on: May 23, 2019, 07:43:29 AM »
В справке написано, что LOGWRITE  и PRINT - синонимы. Хорошо, проверю

LOGWRITE и PRINT одно и тоже. Запись производится в ANSI кодировке
TFWRITE пишет в UTF-8 из за чего в файле смешиваются две кодировки.

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #4 on: May 23, 2019, 08:49:51 PM »
А есть ли возможность писать PRINT в UTF-8?
Или просто нельзя смешивать потоки вывода? Но с  другой стороны, читать логи в ANSI с веба не получится - будет кракозябра?
Проверил - все нормально.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #5 on: May 24, 2019, 04:37:43 PM »
исправим в будущем, приведем все к UTF8

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #6 on: May 24, 2019, 07:21:26 PM »
Спасибо!

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Print + #logfile = непонятная кодировка
« Reply #7 on: June 05, 2019, 07:09:47 PM »
Но с  другой стороны, читать логи в ANSI с веба не получится - будет кракозябра?
Проверил - все нормально.
Нормально - есои стоит винда русская. Но в принципе, переключением кодировки в браузере лог становится читаемым.