postgresql 因编码错误导致 gammu-smsd 崩溃

postgresql 因编码错误导致 gammu-smsd 崩溃

我在 ubuntu 12.04 上使用 gammu-smsd 作为我的短信网关。它扫描我的调制解调器中的信息并将其插入到 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

它崩溃了,并且在系统日志中输出与我上面显示的相同的输出。

我该如何修复此问题?

答案1

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 不要关心你传递给它的内容。
这是一个借口,但却是一个快速的解决方案。

答案2

这里的实际问题是 gammu-smsd 正尝试将 UTF-16 发送到 UTF-8 数据库:

>>> str = '

相关内容