Задать вопрос
@astar7922

Как 16-ричный октет стринг из UTF-8 преобразовать в windows-1251?

Добрый день
Пишу шаблон для устройства. В MIB файле OID описан как
workStatus OBJECT-TYPE    
	    	SYNTAX      OCTET STRING (SIZE (0..255))

item возвращает строчку "C4 E5 E6 F3 F0 ED FB E9"
Hex to string online converter говорит что это слово "Дежурный"

нашел в сети вот такой скрипт для Preprocessing:
var str1 = value;
var hex = str1.toString();
if (! hex.match(/\b[0-9A-F ]{6}\b/gi)) {
return str1;
} else {
hex = hex.replace(/ /g,"");
var str = '';
for (var n = 0; n < hex.length; n += 2) { str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); }
return str; }


результатом является: Äåæóðíûé
я понимаю, что JAVA оперирует строками в формате UTF-8

Как мне на выходе получить строку в правильной кодировке windows-1251

В Java не силен от слова совсем
  • Вопрос задан
  • 39 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@Zzzz9
Это байты cp1251
javascript
const bytes = [0xC4, 0xE5, 0xE6, 0xF3, 0xF0, 0xED, 0xFB, 0xE9];
const decoder = new TextDecoder('windows-1251');
const string = decoder.decode(new Uint8Array(bytes));

console.log(string);

Выводит Дежурный
python
h = 'C4 E5 E6 F3 F0 ED FB E9'
byte_string = bytes.fromhex(h)
decoded_string = byte_string.decode('windows-1251')
print(decoded_string)
for i in h.split():
    print(f'{i} {int(i,16)}')


Дежурный
C4 196
E5 229
E6 230
F3 243
F0 240
ED 237
FB 251
E9 233
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.
А в Линуксе?
есть такая утилита - iconv
iconv -f utf8 -t cp1251 filename.txt > filename-win.txt
или
iconv -f utf8 -t cp1251 filename.txt -o filename-win.txt

... если я правильно понял, результат надо отобразить в Zabbix?

В Java тоже нуль, но обратная задача решается так:
https://stackoverflow.com/questions/26995472/java-...
и
https://www.demo2s.com/g/java/how-to-convert-windo...
Ответ написан
Комментировать

я понимаю, что JAVA оперирует строками в формате UTF-8

А вот и не угадал. В жаве строки UTF-16.
Хотя вопрос вроде по JavaScript


Как мне на выходе получить строку в правильной кодировке windows-1251

Судя по данным - тебе нужно наоборот.
На входе у тебя строка в win1251, а преобразовать нужно в нормальную строку.

Обычно в таких случаях сначала парсят в массив байт, а потом уже его интерпретируют как текст в нужной кодировке.
Шаг первый:
Читаем hex и складываем байты в ArrayBuffer
https://stackoverflow.com/questions/43131242/how-t...

Шаг второй:
При помощи TextDecoder декодируем байты из cp1251
https://stackoverflow.com/questions/17191945/conve...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы