ruby-on-rails - Rails 3,heroku - PGError : ERROR: invalid byte sequence for encoding "UTF8":

标签 ruby-on-rails ruby-on-rails-3

我只是通过 Rails 3 在 Heroku (postgres) 上随机得到这个奇怪的错误

PGError: ERROR: invalid byte sequence for encoding "UTF8": 0x85 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 ('BTW∑I re-listened to the video' ......

这个提示虽然不错,但并没有让我有任何点击。我可以在某处设置编码吗?我应该搞乱它吗?有人看到过这个和/或对如何处理此类问题有任何想法吗?

谢谢

最佳答案

据我所知,这是一个问题,您尝试插入 PostgrSQL 服务器的字符串未使用 UTF-8 编码。这有点奇怪,因为您的 Rails 应用程序应该配置为默认使用 UTF-8。

您可以尝试通过多种方法解决此问题(按照我推荐的顺序):

  • 首先,确保 config/application.rb 中的 config.encoding 设置为 "utf-8"

  • 如果您使用的是 Ruby 1.9,您可以尝试在插入之前使用 toutf8 强制进行字符编码。

  • 您可以找出字符串的编码方式,然后在 PostgeSQL 连接上手动设置 SET CLIENT_ENCODING TO 'ISO-8859-1'; (或任何编码)插入字符串。不要忘记在重置编码的语句后执行 RESET CLIENT_ENCODING;

  • 如果您使用的是 Ruby 1.8(可能性更大),则可以使用 iconv 库将字符串转换为 UTF-8。请参阅文档 here .

  • 一个更黑客的解决方案是覆盖模型中的 getter 和 setter(即 contentcontent=),使用 Base64 对字符串进行编码和解码。它看起来像这样:

 

require 'base64'

class Comment
  def content
    Base64::decode64(self[:content])
  end

  def content=(value)
    self[:content] = Base64::encode64(value)
  end
end

关于ruby-on-rails - Rails 3,heroku - PGError : ERROR: invalid byte sequence for encoding "UTF8":,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741404/

相关文章:

ruby-on-rails - 添加@import "bootstrap"后出错; Static_pages#home 中的参数错误

ruby-on-rails - Rails Truncate 和 raw 不能一起工作

ruby-on-rails - Rails 字符串数组和 PostgreSQL

ruby-on-rails - Mechanize - 如何在 rails 中遵循或 "click"元刷新

ruby-on-rails-3 - 同一页面上有多个 content_for

ruby-on-rails - Rails 嵌套资源和 :path => "/"

ruby-on-rails - 如何向 Rails 的部分渲染查找添加 View 路径?

ruby-on-rails - 如何使用FactoryGirl工厂搭建开发数据库?

ruby-on-rails - 如何在 Ruby on Rails 中构建多级层次结构?

ruby-on-rails - ruby rails : localhost:3000/my_pages_dont_show_up