Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails、PostgreSQL和非标准字符编码错误_Ruby On Rails_Postgresql_Heroku_Character Encoding - Fatal编程技术网

Ruby on rails Rails、PostgreSQL和非标准字符编码错误

Ruby on rails Rails、PostgreSQL和非标准字符编码错误,ruby-on-rails,postgresql,heroku,character-encoding,Ruby On Rails,Postgresql,Heroku,Character Encoding,我得到以下错误: ActiveRecord::StatementInvalid: PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xf66e6bf6 : INSERT INTO "response_sets" ("city") VALUES ('Jönköping') RETURNING "id" 数据库是Heroku应用程序上的PostgreSQL 9.0.6 不确定当存在奇数字符时如何避免该错误。您的数据库未设置为

我得到以下错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xf66e6bf6 : INSERT INTO "response_sets" ("city") VALUES ('Jönköping') RETURNING "id"
数据库是Heroku应用程序上的PostgreSQL 9.0.6


不确定当存在奇数字符时如何避免该错误。

您的数据库未设置为与您尝试插入的字符串相同的编码方案。我想Heroku上的Postgres默认设置为使用UTF-8,如果我不得不猜测的话,您的输入可能是拉丁语变体之一。您可以将数据库设置为接受您提供的编码方案,例如:

SET CLIENT_ENCODING 'ISO-8859-2'
或者您可以将输入代码转换为UTF-8(这可能更好)


您的数据库可能没有设置为与插入的字符串相同的编码。博士后通常是UTF-8。 您必须对字符串设置正确的编码。
这可能很简单

"string".encode('UTF-8')
或者,如果字符串标记不正确,您可能还必须首先强制_编码。例如,它存储为“Windows-1252”,但没有被Ruby标记为“Windows-1252”

"string".force_encoding('Windows-1252').encode('UTF-8')
我们在使用Sendgrid+Heroku Rails时遇到了这个问题

这似乎适合我:

"Hern\xE1ndez".encode('UTF-8','ISO-8859-1')
第一个参数是您希望字符串采用的编码,第二个参数是您认为字符串采用的编码

文档中还有关于如何处理无效或未定义字符的选项

这就是我最后使用的(为了安全):

您还可以组成一个助手方法:

def convert_to_utf_8(string)
  string.encode('UTF-8','ISO-8859-1', :invalid => :replace, :undef => :replace, :replace => "?")
end

我遇到的问题是从Amazon Merchant Services API加载数据。

强制编码是我修复错误所需的神奇成分。我还使用了Sendgrid+Heroku Rails,特别是使用它们的解析函数来解析传入的电子邮件(在它们的:text和:html参数上)
"Hern\xE1ndez".encode('UTF-8','ISO-8859-1', :invalid => :replace, :undef => :replace, :replace => "?")
def convert_to_utf_8(string)
  string.encode('UTF-8','ISO-8859-1', :invalid => :replace, :undef => :replace, :replace => "?")
end