Добрый день!
Есть МФУ которая отдаёт по SNMP строки в uft8. Но NetXMS, как я понял, дополнительно конвертирует данные в utf8. В итоге получается мусор.
Вот что выдаёт устройство:
root@NetXMS:~# snmpwalk -v 2c -c public km37ad84 iso.3.6.1.2.1.43.16.5.1.2.1.1
iso.3.6.1.2.1.43.16.5.1.2.1.1 = Hex-STRING: D0 A0 D0 B5 D0 B6 D0 B8 D0 BC 20 D0 BE D0 B6 D0
B8 D0 B4 D0 B0 D0 BD D0 B8 D1 8F 2E 2E 2E 2E 20
20
root@NetXMS:~# ipython3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import codecs
In [2]: codecs.decode("D0 A0 D0 B5 D0 B6 D0 B8 D0 BC 20 D0 BE D0 B6 D0 B8 D0 B4 D0 B0 D0 BD D0 B8 D1 8F 2E 2E 2E 2E 20 20".replace(' ', ''), 'hex').decod
...: e('utf8')
Out[2]: 'Режим ожидания.... '
In [3]: quit
А на скриншоте то что видно в консоли NetXMS.
Как это можно исправить? В описании скриптового языка не нашёл работы с кодировками текста.
Сервер на Debian 10 версия 3.9.176-1
На линуксах это определяется CodePage в конфигурационном файле сервера.
Спасибо! Помогло.
Но не очевидно, как быть если какие-то железки будут отдавать данные в cp1251 или cp866?
И почему по умолчанию на Linux не UTF-8? Да просто, локаль настроена, почему не брать настройки оттуда:locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
В планах есть мысли сделать NXSL функции для конвертации текста в разных кодировках.
Quote from: prof-alex on September 03, 2021, 02:59:35 PM
И почему по умолчанию на Linux не UTF-8?
Исторически так сложилось :) Это очень старая часть кода, правильно конечно использовать системный locale (как сделано в Windows версии). Отмечу себе для переделки в 4 версии.
А у меня на Windows на самой последней версии то же самое.
С одного принтера по SNMP - Черный карС,СЂРёРґР¶ 508X HP CF360X
А что в Control Panel -> Regional settings -> Language for non-unicode programs?
Русский
Похоже, что этот принтер отдает в UTF-8. На windows поскольку мы берем кодировку из control panel, а там нет варианта utf-8, то там пока никак. Или перебираться на линукс, или через какое-то время будет или поддержка кодировки в свойствах ноды, или NXSL функции для перекодировки (тогда их можно будет в transformation script использовать).
Quote from: Filipp Sudanov on September 15, 2021, 12:29:45 PM
Похоже, что этот принтер отдает в UTF-8. На windows поскольку мы берем кодировку из control panel, а там нет варианта utf-8, то там пока никак. Или перебираться на линукс, или через какое-то время будет или поддержка кодировки в свойствах ноды, или NXSL функции для перекодировки (тогда их можно будет в transformation script использовать).
надо в NXSL перекодировку добавлять - это более нужно