SNMP и UFT-8

Started by prof-alex, August 31, 2021, 01:44:25 PM

Previous topic - Next topic

prof-alex

Добрый день!

Есть МФУ которая отдаёт по 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

Filipp Sudanov

На линуксах это определяется CodePage в конфигурационном файле сервера.

prof-alex

Спасибо! Помогло.
Но не очевидно, как быть если какие-то железки будут отдавать данные в 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=

Filipp Sudanov

В планах есть мысли сделать NXSL функции для конвертации текста в разных кодировках.


Victor Kirhenshtein

Quote from: prof-alex on September 03, 2021, 02:59:35 PM
И почему по умолчанию на Linux не UTF-8?

Исторически так сложилось :) Это очень старая часть кода, правильно конечно использовать системный locale (как сделано в Windows версии). Отмечу себе для переделки в 4 версии.

Akira

А у меня на Windows на самой последней версии то же самое.
С одного принтера по SNMP - Черный карС,СЂРёРґР¶ 508X HP CF360X

Filipp Sudanov

А что в Control Panel -> Regional settings -> Language for non-unicode programs?

Akira


Filipp Sudanov

Похоже, что этот принтер отдает в UTF-8. На windows поскольку мы берем кодировку из control panel, а там нет варианта utf-8, то там пока никак. Или перебираться на линукс, или через какое-то время будет или поддержка кодировки в свойствах ноды, или NXSL функции для перекодировки (тогда их можно будет в transformation script использовать).

Akira

Quote from: Filipp Sudanov on September 15, 2021, 12:29:45 PM
Похоже, что этот принтер отдает в UTF-8. На windows поскольку мы берем кодировку из control panel, а там нет варианта utf-8, то там пока никак. Или перебираться на линукс, или через какое-то время будет или поддержка кодировки в свойствах ноды, или NXSL функции для перекодировки (тогда их можно будет в transformation script использовать).

надо в NXSL перекодировку добавлять - это более нужно