누구든지이 오류를 본 적이 있습니까?레일즈 - 포스트그레스 DB에 메일 첨부 파일을 저장하면 PGError가 발생합니다 : 오류 : "UTF8"인코딩의 바이트 시퀀스가 잘못되었습니다 : 0xa0
PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xa0
들어오는 메일 첨부 파일 (들)을 처리하기 위해 모든 파일 형식을 데이터베이스에 저장하려고합니다.
아이디어가 있으십니까?
누구든지이 오류를 본 적이 있습니까?레일즈 - 포스트그레스 DB에 메일 첨부 파일을 저장하면 PGError가 발생합니다 : 오류 : "UTF8"인코딩의 바이트 시퀀스가 잘못되었습니다 : 0xa0
PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xa0
들어오는 메일 첨부 파일 (들)을 처리하기 위해 모든 파일 형식을 데이터베이스에 저장하려고합니다.
아이디어가 있으십니까?
데이터를 저장할 열의 유형은 무엇입니까? 첨부 파일이 어떤 형식이든 가능하다면 데이터가 blob (이진 "큰"개체)로 전달되도록하려면 바이트 열이 필요합니다. 다른 대답에서 언급했듯이, 그 오류는 UTF-8 인코딩으로 된 텍스트로 태그 지정된 PostgreSQL으로 보낸 일부 데이터가 유효하지 않음을 나타냅니다.
이메일 첨부 파일을 MIME 콘텐츠 유형 헤더와 함께 바이너리로 저장하는 것이 좋습니다. Content-Type 헤더에는 이진 내용을 이해할 수있는 첨부 파일의 텍스트로 변환하는 데 필요한 문자 인코딩이 포함되어야합니다. "text/plain; charset = iso-8859-1".
디코딩 된 텍스트를 데이터베이스에서 사용할 수있게하려면 응용 프로그램에서 해당 디코딩 된 텍스트를 디코딩하고 텍스트 콘텐츠를 저장하도록 할 수 있습니다. 디코딩 된 버전에 대한 추가 열이있을 수 있습니다. PostgreSQL의 전체 텍스트 인덱싱을 전자 메일 첨부 파일에 사용하려는 경우 유용합니다. 그러나 나중에 검색하기 위해 데이터베이스에 저장하려는 경우 이진 파일로 저장하고 응용 프로그램에 텍스트 인코딩 걱정할 필요가 없습니다.
0xa0은 비 구분 공백이며 가능한 경우 latin1 인코딩입니다. 파이썬에서는 str.decode()와 str.encode()를 사용하여 현재의 인코딩에서 타겟 인코딩 (여기 'utf8')으로 변경합니다. 하지만 레일스에서 어떻게 움직일 지 모르겠습니다.
나는 레일에 대해 잘 모르겠지만, PG이 오류 메시지를 제공 할 때 그것은 의미 :
그레스와 레일 클라이언트 사이의 연결이 제대로 모든 것을 의미 UTF-8 인코딩을 사용하도록 구성되어클라이언트와 포스트 그레스 사이에가는 텍스트 데이터는 UTF-8
에 encoed 있어야하며 레일 클라이언트가 잘못 (1-라틴어 또는 ISO-8859 대부분의 아마) 다른 인코딩으로 인코딩 된 일부 데이터를 전송 그러므로
데이터가 데이터베이스에 삽입되는 클라이언트 코드를 조사해야합니다. 아마도 유니 코드가 아닌 문자열을 삽입하려고 시도하거나 부적절한 코드 변환이 발생했을 수 있습니다.