postgresql вылетает gammu-smsd с ошибкой кодирования

Я использую gammu-smsd на Ubuntu 12.04 в качестве моего смс-шлюза. Он сканирует информацию с моего модема и вставляет ее в базу данных postgresql. По-видимому, он попытался вставить что-то в папку "Входящие" с недопустимыми символами в соответствии с /var/log/syslog:

 Oct 28 16:22:15 porkypig gammu-smsd[14936]: SQL failed: INSERT INTO inbox (ReceivingDateTime, Text, SenderNumber, Coding, SMSCNumber, UDH, Class, TextDecoded, RecipientID) VALUES ('2013-10-24 20:03:19', 'D83DDC4D','+13053057707','Unicode_No_Compression','+14044550007','','-1','<d83d><dc4d>','')
Oct 28 16:22:15 porkypig gammu-smsd[14936]: Error: ERROR:  invalid byte sequence for encoding "UTF8": 0xeda0bd#012HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
Oct 28 16:22:15 porkypig gammu-smsd[14936]: Query failed, checking connection 

Теперь, когда я пытаюсь запустить сервер gammu-smsd:

sudo /etc/init.d/gammu-smsd start

он вылетает с тем же выводом в системном журнале, как я показал выше.

Что я могу сделать, чтобы это исправить?

2 ответа

Решение

Postgres уже сказал вам, что вы можете сделать, чтобы это исправить:

Oct 28 16:22:15 porkypig gammu-smsd[14936]: Error: ERROR:  invalid byte sequence for encoding "UTF8": 0xeda0bd#012HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

invalid byte sequence for encoding "UTF8": 0xeda0bd#012
"Ваш клиент (gammu-smsd в этом случае) пошли мне бред. Я не говорю на тарабарщине, я говорю на utf-8. "

This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
"Скажите, какую кодировку использует ваш клиент, либо установив кодировку базы данных (что потребует ее удаления и повторного создания), либо установив свой клиент client_encoding надлежащим образом ".


Если вы не знаете, какая кодировка gammu-smsd пытается использовать, заново создать базу данных с SQL_ASCII encoding что в основном говорит Postgres не заботиться о том, что вы передаете.
Это отговорка, но это быстрое решение.

Проблема в том, что gammu-smsd пытается отправить UTF-16 в базу данных UTF-8:

>>> str = ''
>>> str
''
>>> str.encode('utf-16-be')
b'\xd8=\xdcM'
>>> for c in str.encode('utf-16-be'): print('{:x}'.format(c))
d8
3d
dc
4d

Это должно быть отправка:

>>> str.encode('utf-8')
b'\xf0\x9f\x91\x8d'

(см. также http://www.fileformat.info/info/unicode/char/1F44D/index.htm).

Другие вопросы по тегам