PG ::错误:错误:编码"UTF8"的无效字节序列:0xfc

Shp*_*ord 1 ruby postgresql encoding ruby-on-rails heroku

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

ActiveRecord::StatementInvalid: PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xfc
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

mu *_*ort 12

小写U-umlaut在ISO 8859-1(AKA Latin-1)中是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')
Run Code Online (Sandbox Code Playgroud)

然后使用该utf_8_string版本.