Ошибка кодирования PostgreSQL 8.4 - PullRequest
4 голосов
/ 10 мая 2010

Я импортирую данные из файла CSV. На одном из полей есть акцент (Telefónica O2 UK Limited). Приложение выдает ошибку en при вставке данных в таблицу.

PGError: ERROR:  invalid byte sequence for encoding "UTF8": 0xf36e6963
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 "companies" ("name", "validated") 
    VALUES(E'Telef?nica O2 UK Limited', 't')

Ввод данных через формы работает, когда я ввожу имена с ударением и умлаут. Как мне обойти эту проблему?

Редактировать

Я решил проблему путем преобразования кодировки файла. Я загрузил файл CSV в Google Docs и экспортировал файл в CSV.

Ответы [ 2 ]

6 голосов
/ 10 мая 2010

Сообщение об ошибке довольно ясно: ваша настройка client_encoding установлена ​​на UTF8, и вы пытаетесь вставить символ, который не закодирован в UTF8 (если это CSV из MS Excel, ваш файл, вероятно, закодирован в Windows-1252 вместо).

Вы можете либо конвертировать его в своем приложении, либо изменить соединение с PostgreSQL, чтобы оно соответствовало кодировке, которую вы хотите вставить (что позволяет PostgreSQL выполнить преобразование за вас). Вы можете сделать это, выполнив SET CLIENT_ENCODING TO 'WIN1252'; для вашего соединения с PostgreSQL, прежде чем пытаться вставить эти данные. После импорта вы должны сбросить его к исходному значению с помощью RESET CLIENT_ENCODING;

НТН!

1 голос
/ 19 января 2011

Я думаю, вы можете попробовать использовать Ruby gem rchardet, который может быть лучшим решением. Пример кода:

require ‘rchardet’

cd = CharDet.detect(string_of_unknown_encoding)
encoding = cd['encoding']
converted_string = Iconv.conv(‘UTF-8′, encoding, str_of_unknown_encoding)

Вот несколько ссылок по теме:

https://github.com/jmhodges/rchardet

http://www.meeho.net/blog/2010/03/ruby-how-to-detect-the-encoding-of-a-string/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...