2010-12-12 3 views
0

누구든지이 오류를 본 적이 있습니까?레일즈 - 포스트그레스 DB에 메일 첨부 파일을 저장하면 PGError가 발생합니다 : 오류 : "UTF8"인코딩의 바이트 시퀀스가 ​​잘못되었습니다 : 0xa0

PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xa0

들어오는 메일 첨부 파일 (들)을 처리하기 위해 모든 파일 형식을 데이터베이스에 저장하려고합니다.

아이디어가 있으십니까?

답변

2

데이터를 저장할 열의 유형은 무엇입니까? 첨부 파일이 어떤 형식이든 가능하다면 데이터가 blob (이진 "큰"개체)로 전달되도록하려면 바이트 열이 필요합니다. 다른 대답에서 언급했듯이, 그 오류는 UTF-8 인코딩으로 된 텍스트로 태그 지정된 PostgreSQL으로 보낸 일부 데이터가 유효하지 않음을 나타냅니다.

이메일 첨부 파일을 MIME 콘텐츠 유형 헤더와 함께 바이너리로 저장하는 것이 좋습니다. Content-Type 헤더에는 이진 내용을 이해할 수있는 첨부 파일의 텍스트로 변환하는 데 필요한 문자 인코딩이 포함되어야합니다. "text/plain; charset = iso-8859-1".

디코딩 된 텍스트를 데이터베이스에서 사용할 수있게하려면 응용 프로그램에서 해당 디코딩 된 텍스트를 디코딩하고 텍스트 콘텐츠를 저장하도록 할 수 있습니다. 디코딩 된 버전에 대한 추가 열이있을 수 있습니다. PostgreSQL의 전체 텍스트 인덱싱을 전자 메일 첨부 파일에 사용하려는 경우 유용합니다. 그러나 나중에 검색하기 위해 데이터베이스에 저장하려는 경우 이진 파일로 저장하고 응용 프로그램에 텍스트 인코딩 걱정할 필요가 없습니다.

0

0xa0은 비 구분 공백이며 가능한 경우 latin1 인코딩입니다. 파이썬에서는 str.decode()와 str.encode()를 사용하여 현재의 인코딩에서 타겟 인코딩 (여기 'utf8')으로 변경합니다. 하지만 레일스에서 ​​어떻게 움직일 지 모르겠습니다.

0

나는 레일에 대해 잘 모르겠지만, PG이 오류 메시지를 제공 할 때 그것은 의미 :

그레스와 레일 클라이언트 사이의 연결이 제대로 모든 것을 의미 UTF-8 인코딩을 사용하도록 구성되어
  • 클라이언트와 포스트 그레스 사이에가는 텍스트 데이터는 UTF-8

  • 에 encoed 있어야하며 레일 클라이언트가 잘못 (1-라틴어 또는 ISO-8859 대부분의 아마) 다른 인코딩으로 인코딩 된 일부 데이터를 전송 그러므로

  • 을 거부 POSTGRES

데이터가 데이터베이스에 삽입되는 클라이언트 코드를 조사해야합니다. 아마도 유니 코드가 아닌 문자열을 삽입하려고 시도하거나 부적절한 코드 변환이 발생했을 수 있습니다.

관련 문제