我只是在heroku(postgres)上通过Rails 3随机获得了这个奇怪的错误
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' ......
好的提示并没有为我点击任何东西。我可以在某处设置编码吗?我应该惹这个吗?有人看过这个和/或对如何处理这类问题有任何想法吗?
谢谢
答案 0 :(得分:6)
从我可以收集的内容来看,这是一个问题,即您尝试插入PostgrSQL服务器的字符串不是用UTF-8编码的。这有点奇怪,因为您的Rails应用程序应配置为默认使用UTF-8。
有几种方法可以尝试修复此问题(按照我推荐的顺序):
首先,确保config.encoding
中的"utf-8"
设置为config/application.rb
。
如果您使用的是Ruby 1.9,可以尝试在插入toutf8
之前强制使用字符编码。
您可以弄清楚字符串的编码方式,并在插入字符串之前手动设置PostgeSQL连接上的SET CLIENT_ENCODING TO 'ISO-8859-1';
(或编码)。不要忘记在重置编码的语句后执行RESET CLIENT_ENCODING;
。
如果您使用的是Ruby 1.8(更有可能),您可以使用iconv库将字符串转换为UTF-8。请参阅文档here。
更狡猾的解决方案是覆盖模型中的getter和setter(即content
和content=
)编码并使用Base64解码您的字符串。它看起来像这样:
require 'base64'
class Comment
def content
Base64::decode64(self[:content])
end
def content=(value)
self[:content] = Base64::encode64(value)
end
end
答案 1 :(得分:0)
text.force_encoding(字符集).encode( “UTF-8”)