【问题标题】:PGError: ERROR: invalid byte sequence for encoding "UTF8PGError:错误:编码“UTF8”的字节序列无效
【发布时间】:2011-01-23 02:35:39
【问题描述】:

我在从 Cloudmailin 接收 Rails 电子邮件时收到以下 PGError:

PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xbb HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". : INSERT INTO "comments" ("content") VALUES ('Reply with blah blah  ����������������������������������������������������� .....

所以很明显我在电子邮件中输入了一些无效的 UTF8 字符,对吗?所以我试图清理它,但有些东西仍然在偷偷摸摸。到目前为止,这是我所拥有的:

message_all_clean = params[:message]
Iconv.conv('UTF-8//IGNORE', 'UTF-8', message_all_clean)
message_plain_clean = params[:plain]
Iconv.conv('UTF-8//IGNORE', 'UTF-8', message_plain_clean)

@incoming_mail = IncomingMail.create(:message_all => Base64.encode64(message_all_clean), :message_plain => Base64.encode64(message_plain_clean))

有什么想法、想法或建议吗?谢谢

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-3 encoding heroku


    【解决方案1】:

    在 Heroku 上遇到此问题时,我们转换为 US-ASCII 以适当地清理传入数据(即从 Word 粘贴):

    Iconv.conv("UTF-8//IGNORE", "US-ASCII", content)
    

    有了这个,我们就没有更多的字符编码问题了。

    此外,请仔细检查是否没有其他字段需要相同的转换,因为它可能会影响将文本块传递到数据库的任何内容。

    【讨论】:

    • 谢谢,但我需要做类似 CLEAN = Iconv.conv("UTF-8//IGNORE", "US-ASCII", content) 的事情还是 Iconv 转换内容变量,我可以只是将内容发送到数据库?
    • 啊,我不确定。在实际实践中,我创建了一个Iconv对象(ic = Iconv.new("UTF-8//IGNORE", "US-ASCII")),然后使用了iconv方法:content = ic.iconv(content)。 Iconv.conv() 似乎是它的简写,但我更喜欢有一个可重用的对象。
    • 如何将其转换为不推荐使用 Iconv 的 Ruby 1.9.3?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2022-01-26
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多