@pcdesign

Как это расшифровать?

Есть одно оборудование, которое работает на винде и на com порту (привет из 90-х)
И я считываю что оттуда приходит вот так:
import serial
import time

ser = serial.Serial(
    port='COM1',\
    baudrate=115200,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

print("connected to: " + ser.portstr)

#this will store the line
seq = []
count = 1

while True:
    for c in ser.read():
        seq.append(chr(c)) #convert from ANSII
        joined_seq = ''.join(str(v) for v in seq) #Make a string from array

        if chr(c) == '\n':
            print("Line " + str(count) + ': ' + joined_seq)
            seq = []
            count += 1
            break


ser.close()

И все нормально работает, но там где должна быть кириллицей надпись "Взрослая женщина" получаю кракозяблики
R,3,2022-02-16,16:32:52,masha,§¨,21,Y,§¸§Ö§Ý§î§ß§Ñ§ñ §Ü§â§à§Ó§î,§£§Ù§â§à§ã§Ý§Ñ§ñ §Ø§Ö§ß§ë§Ú§ß§Ñ,

Как это декодировать?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
GavriKos
@GavriKos
Ну так она там и есть. ТОлько в корявой кодировке. Судя по всему в ISO-8859. Проверял вот тут - https://www.online-decoder.com/ru
Гугл в помощь ка кна питоне кирилицу из одной кодировки в другую гонять
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Выглядит как двухбайтная кодировка. Символ § - это код A7, т.е. диапазон кодов 0xA700 - 0xA7FF.
Если считать это как юникод, то это диапазон из Basic Multilingual Plane, соответствует Latin Extended D.
Я подозреваю, что устройство подверглось локализации путём тупой замены отображаемого шрифта, т.е. без замены используемой кодовой страницы.

Далее, я заметил, что только часть "§£§Ù§â§à§ã§Ý§Ñ§ñ §Ø§Ö§ß§ë§Ú§ß§Ñ" сходится по числу букв с "Взрослая женщина", если считаем что пробел остаётся как есть. Тогда получаем §Ñ = 0xA7D1 соответствует "а", а §Ö = 0xA7D6 соответствует "е", как раз на пять символов дальше. §£ = 0xA7A3 соответствует "В", т.е. большие буквы расположены в кодировке раньше. Отсюда можешь попробовать составить таблицу для перекодировки.
Ответ написан
Ваш ответ на вопрос

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

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