我在 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 = '