3

当某些字符串保存到数据库时,我收到以下 ActiveRecord 错误。

ActiveRecord::StatementInvalid: PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xfc

认为这个字符串正在发生Mühldorf

我已经尝试添加# encoding: utf-8到我的 ruby​​ 文件的顶部来解决这个问题,但似乎没有做任何事情。

我正在使用Ruby Geocoder提取位置数据,这就是字符串的来源。

我在 Heroku 上的 Postgres 数据库上运行 Ruby 1.9.3。

4

1 回答 1

18

在ISO 8859-1 (AKA Latin-1)中,小写 U 变音符号是 0xfc,但 0xfc 不是有效的 UTF-8 字符。问题是您有一个 Latin-1 字符串,您试图将其视为 UTF-8,而 PostgreSQL 抱怨是正确的。

修复数据源以向您发送 UTF-8,或者,如果它总是向您发送 Latin-1,请自己修复编码,例如:

utf_8_string = latin_1_string.force_encoding('iso8859-1').encode('utf-8')

然后使用该utf_8_string版本。

于 2013-09-30T20:41:43.750 回答