2013-09-30 4 views
1

Я получаю следующую ошибку ActiveRecord, когда определенные строки сохраняются в базе данных.PG :: Ошибка: ОШИБКА: неверная последовательность байтов для кодирования «UTF8»: 0xfc

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

Я думаю это происходит для этой строки Mühldorf.

Я попытался добавить # encoding: utf-8 в начало моих рубиновых файлов, чтобы решить эту проблему, но, похоже, ничего не делает.

Я вытаскиваю данные о местоположении, используя Ruby Geocoder, и это то, откуда идет строка.

Я бегу Ruby 1.9.3 на базе Postgres на Heroku.

+0

Является ли строка 'Mühldorf' жестко закодированной в вашем исходном файле? Если он исходит из другого источника, то, пожалуйста, скажите где. –

+0

Другой источник (Ruby Geocoder), просто обновил вопрос. – Shpigford

ответ

11

Нижний регистр U-umlaut равен 0xfc в ISO 8859-1 (AKA Latin-1), но 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.

Смежные вопросы