Форум сайта python.su
0
Есть система мониторинга который по событию генерирует alert в виде текстовых сообщений
на python(е) я их обрабатываю (отправляю на smpp шлюз), все было хорошо пока не стали появляться сообщения на кириллице
, пользователям приходило сообщение в вида
Trouble - Количество СЃРІРѕР±РѕРґРЅРѕРіРѕ места РЅР° РґРёСЃРєРµ ${VolumeDescription}попробовал тупо все сообщение открывать в utf8 - тогда при сообщениях на латинице скрипт вылетал с Traceback
UnicodeDecodeError: ‘utf-8’ codec can't decode byte 0xef in position 6: invalid continuation byteт.е. надо как то обработать обе вида сообщения…
import os, codecs try: f = open('C:\\sms.txt', 'r', encoding='utf8') text1 = f.read() except UnicodeDecodeError: f = open('C:\\sms.txt', 'r', encoding='cp1251') text1 = f.read() print(text1)
Отредактировано vuln (Янв. 23, 2016 22:28:49)
Прикреплённый файлы:
test.rar (342 байта)
Офлайн
857
vuln
Прикреплённый файлы:
attachment test.rar (342 байта)
>>> with open('sms-uni.txt', encoding='utf-8') as fin: ... print(fin.read()) ... test#ciscoXXXX status is Up >>> with open('sms-utf.txt', encoding='utf-8') as fin: ... print(fin.read()) ... LENDSTREAM#Trouble - Количество свободного места на диске ${VolumeDescription} сервера LENDSTREAM составляет ${VolumeSpaceAvailable} из ${VolumeSize}- Lendstream-HDD<1Gb >>>
vulnЭто сообщение, закодированное в utf-8, которое раскодируется в cp1251.
пользователям приходило сообщение в вида
>>> s = 'Количество СЃРІРѕР±РѕРґРЅРѕРіРѕ места РЅР° РґРёСЃРєРµ' >>> s.encode('cp1251').decode('utf-8') 'Количество свободного места на диске' >>>
Отредактировано py.user.next (Янв. 24, 2016 03:09:14)
Офлайн
0
спасибо за подсказку
не удачный пример привел там обе сообщение в utf-8 
>>> with open('C:\\sms\\https\\sms-uni.txt', encoding='utf-8') as fin:
print(fin.read())
Traceback (most recent call last):
File “<pyshell#5>”, line 2, in <module>
print(fin.read())
File “C:\Python34\lib\codecs.py”, line 319, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: ‘utf-8’ codec can't decode byte 0xef in position 15: invalid continuation byte
>>> with open('C:\\sms\\https\\sms-uni.txt', encoding='cp1251') as fin:
print(fin.read())
test#ciscoXXXX привет это я - трабл
>>>
Отредактировано vuln (Янв. 24, 2016 16:47:15)
Прикреплённый файлы:
sms-uni.txt (35 байт)
Офлайн
857
vulnЗначит, там используется cp1251 всегда. Просто cp1251 и utf-8 совпадают по кодам в пределах ascii. Поэтому тебе кажется, что оно закодировано в utf-8, если на английском, тогда как на самом деле оно всё так же закодировано в cp1251.
Есть система мониторинга который по событию генерирует alert в виде текстовых сообщений
Отредактировано py.user.next (Янв. 25, 2016 03:34:56)
Офлайн
0
в том то и дело что у меня несколько систем мониторинга каждый отправляет в своем формате, я тоже обеими руками за utf8 но разработчик по пока молчит - вот и приходиться делать костыли
Отредактировано vuln (Янв. 25, 2016 08:31:47)
Офлайн
253
vulnДа
его реально заставить работать ?
vulnПытаетесь построить общее решение. Реально на коротких сообщениях нельзя отличить utf-8 от других кодировок. (Т.е. можно сделать сообщения которые валидны в разных кодировках, но выглядят по разному).
что я делаю не так?
Отредактировано doza_and (Янв. 25, 2016 08:42:42)
Офлайн
0
спасибо всем , вопрос закрыт
Офлайн