Ruby on rails Rails 3,heroku-PGError:错误:编码的字节序列无效;UTF8";:
我只是在heroku(postgres)上通过Rails 3随机得到了这个奇怪的错误 这个提示虽然很好,但对我来说并没有任何作用。我可以在什么地方设置编码吗?我是不是该搞砸了?有人看到这一点和/或对如何处理这类问题有任何想法吗Ruby on rails Rails 3,heroku-PGError:错误:编码的字节序列无效;UTF8";:,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我只是在heroku(postgres)上通过Rails 3随机得到了这个奇怪的错误 这个提示虽然很好,但对我来说并没有任何作用。我可以在什么地方设置编码吗?我是不是该搞砸了?有人看到这一点和/或对如何处理这类问题有任何想法吗 谢谢据我所知,这是一个问题,您试图插入PostgrSQL server的字符串没有使用UTF-8编码。这有点奇怪,因为Rails应用程序在默认情况下应该配置为使用UTF-8 有几种方法可以尝试修复此问题(按照我建议的顺序): 首先,确保在config/applicati
谢谢据我所知,这是一个问题,您试图插入PostgrSQL server的字符串没有使用UTF-8编码。这有点奇怪,因为Rails应用程序在默认情况下应该配置为使用UTF-8 有几种方法可以尝试修复此问题(按照我建议的顺序):
- 首先,确保在
中将config/application.rb
设置为config.encoding
“utf-8”
- 如果您使用的是Ruby 1.9,则可以尝试在插入之前使用
强制进行字符编码toutf8
- 您可以确定字符串的编码方式,并手动将
set CLIENT_ENCODING设置为“ISO-8859-1”插入字符串之前,请在PostgeSQL连接上执行代码>(或任何编码)。不要忘记执行
重置客户端编码代码>在语句之后重置编码
- 如果您使用的是Ruby 1.8(更可能),那么可以使用iconv库将字符串转换为UTF-8。见文件
- 一个更黑客的解决方案是覆盖模型中的getter和setter(即
和content
),用Base64对字符串进行编码和解码。看起来是这样的:content=
谢谢你,Voncorad,你是个救命恩人。我确实正确设置了config.ecoding。虽然Heroku可能在部署上有所改变。如果我使用iconv解决方案,从您的评论来看,这似乎是最明智的选择,那么在升级到Ruby 1.9时,有什么问题吗?另外,对于iconv来说,文档是相当空的,我是一个新手,有没有看到一个例子?谢谢我相信
iconv
应该适用于1.8和1.9。至于代码,类似这样的东西应该可以工作:content=::Iconv.conv('UTF-8//IGNORE','UTF-8',content+'')[0..-2]
。基本上,这强制编码为UTF-8,不管它最初是什么。我从这里得到了密码:
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' ......
require 'base64'
class Comment
def content
Base64::decode64(self[:content])
end
def content=(value)
self[:content] = Base64::encode64(value)
end
end