2011-01-23 5 views
6

Dostaję następujący PGError podczas spożywania Rails maile od Cloudmailin:PGError: BŁĄD: nieprawidłowy ciąg bajtów do kodowania „UTF8

PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xbb 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 "comments" ("content") VALUES ('Reply with blah blah ����������������������������������������������������� ..... 

Więc wydaje się całkiem jasne, mam pewne nieprawidłowe znaki UTF8 wsiada do wiadomości e-mail ? rację więc starałem się oczyścić, że coś się jednak nadal Skradanie poprzez Oto co mam do tej pory.?

message_all_clean = params[:message] 
Iconv.conv('UTF-8//IGNORE', 'UTF-8', message_all_clean) 
message_plain_clean = params[:plain] 
Iconv.conv('UTF-8//IGNORE', 'UTF-8', message_plain_clean) 

@incoming_mail = IncomingMail.create(:message_all => Base64.encode64(message_all_clean), :message_plain => Base64.encode64(message_plain_clean)) 

jakieś pomysły, myśli lub sugestie Dzięki

Odpowiedz

8

Po napotkaniu tego problemu na Heroku dokonaliśmy konwersji na US-ASCII w celu odpowiedniego odkażenia przychodzących danych (tj. wklejony z Worda):

Iconv.conv("UTF-8//IGNORE", "US-ASCII", content) 

Dzięki temu nie mieliśmy więcej problemów z kodowaniem znaków.

Należy również sprawdzić, czy nie ma innych pól, które wymagają tej samej konwersji, ponieważ może to wpłynąć na wszystko, co przekazuje blok tekstu do bazy danych.

+1

Dzięki, ale czy muszę zrobić coś takiego jak CLEAN = Iconv.conv ("UTF-8 // IGNORE", "US-ASCII", zawartość) lub czy Iconv konwertuje zawartość var ​​i mogę po prostu wysłać zawartość do DB? – AnApprentice

+2

Ah, nie jestem pewien. W praktyce utworzyłem obiekt Iconv (ic = Iconv.new ("UTF-8 // IGNORE", "US-ASCII")), a następnie użyłem metody iconv: content = ic.iconv (content). Iconv.conv() wydaje się być skrótem do tego, ale wolałem mieć obiekt wielokrotnego użytku. – Dominic

+2

Jak przekonwertować go na Ruby 1.9.3, gdzie Iconv jest przestarzałe? –