Локализация в snmp
В нашем продукте есть агент snmp, который отправляет системные предупреждения на сервер snmp, и наши предупреждения могут быть в Unicode. Мы используем стороннюю библиотеку lib для отправки, которая по умолчанию кодирует строки в байтовый массив ASKII. Наконец мы получили мусор на сообщениях.
Есть ли поддержка протокола unmp в юникоде?
2 ответа
Задача агентов SNMP - правильно локализовать сообщение. Задача инструмента управления SNMP - правильно декодировать сообщение.
Трассировка WireShark покажет, поместил ли ваш агент правильный проводной массив в провод. Если ваше сообщение - Unicode, байты должны начинаться с действительной преамбулы Unicode.
Также в зависимости от типа вашего устройства в MIB агента есть и другие области, которые помогают инструменту управления правильно декодировать сообщение.
Например, таблица prtLocalization для принтеров должна показывать поддержку Unicode, а prtGeneralCurrentLocalization помогает инструментам управления знать, как правильно декодировать сообщение.
Как уже упоминал Лекс Ли, SNMP не заботится о строковом кодировании. OCTET STRING - это просто байтовый массив. Поэтому, когда вам приходится иметь дело с локализацией / интернационализацией, правильным решением, безусловно, является использование кодирования / декодирования UTF-8. Но имейте в виду, что SNMP4J и многие другие библиотеки обрабатывают байтовый массив как строку ASCII в таких методах, как toString()
, Так что вам придется писать свои собственные расширения.