2011-02-23 5 views
1

여기에서 사용할 수있는 모든 인코딩 중에서 http://docs.python.org/library/codecs.html 하나는 내가 문자열로 다시 인코딩 할 때 손상되지 않고 유니 코드로 이진 데이터를 디코딩하는 데 사용해야합니다 하나입니까?이진 데이터를 유니 코드로

raw_unicode_data를 사용했지만 작동하지 않습니다.

예 : 사진을 POST에 업로드하지만 파일 첨부는 아닙니다. Django는 utf-8을 사용하여 POST 데이터를 유니 코드로 변환합니다. 그러나 유니 코드를 다시 utf-8을 사용하여 문자열로 변환하면 데이터가 손상됩니다. 나는 raw_unicode_data를 사용했고 같은 일이 발생했습니다 (이번에는 단지 몇 바이트 였지만). 디코딩 및 인코딩 단계가 데이터를 손상시키지 않도록 어떤 인코딩을 사용해야합니까?

+5

"이진 데이터"? 의미를 정의하고, 예제를 제공하고, 아마도이 것을 읽거나, 검색하거나, 빌드하는 데 사용하는 코드를 제공하십시오. –

+2

예제가 신뢰할 수없는 것처럼 보입니다. bytes_representing_a_picture.decode ('utf8')는 장고가 'ignore'또는 'replace'옵션을 사용하는 경우 (물론 aarrgghh) –

+0

@ 존을 제외하고는 99.9 %가 실패 할 확률이 높습니다. 실제로는 실패합니다. –

답변

3

"이진 데이터"는 텍스트가 아니므로 unicode으로 변환하는 것은 의미가 없습니다. 이진 데이터에 텍스트가 포함되어 있으면 먼저 추출한 다음 데이터 형식의 사양에 지정된 인코딩을 사용하여 디코딩합니다.

+5

바이너리 데이터는 무엇이든 의미 할 수 있습니다. 유니 코드를 디코딩 할 수있는 '바이트'일 수 있습니다. –

+0

@ S.Lott : 추출 프로세스가 모든 것을 그대로 사용한다면 그렇게 될 것입니다. 그러나 나는 나의 대답을 기다린다. –

+0

답변을 기다려야합니다. 그러나 파일에서 이진 데이터를 가져 오는 가장 일반적인 경우를 포함하도록 확장 할 수도 있습니다. –

1

, 당신의 질문은 특히 명확하지 않다. POST와 같은 텍스트 채널을 통해 바이너리 데이터를 퍼널하려는 경우 base64은 클라이언트와 서버에서 적절한 데이터 변환 작업 (바이너리 데이터 -> base64 텍스트 -> 텍스트 채널 전달)에 사용할 올바른 형식입니다 -> base64 텍스트 -> 2 진 데이터).

인코딩 된 텍스트를 허용하고 싶다면 (예 : 파일 경로 및 환경 변수와 같은 일부 인터페이스에서 Python 3이 시도하는 것처럼), Python 3.1 이상에서 오류 처리기 surrogatescape을 사용할 수 있습니다. 값을 유효한 읽을 수있는 텍스트가 아닌 형식으로 변환하지만 바이트로 다시 인코딩 할 때 원래의 이진 데이터를 충실하게 다시 만들 수 있습니다.

+1

문제는 POST가 텍스트 채널이 아니기 때문입니다. 실제로 서버는 불만없이 Content-Length까지 모든 것을 먹을 것입니다. 나는 문제가 OP에서 이진 파일을 앰퍼샌드를 찾을 때 질식하는 POST 파 필드 **와 필드 파서 (mod_wsgi 또는 Django 또는 무엇이든)에서 바이너리를 업로드하려고한다는 것을 직면하고 있다고 생각합니다. 너와 나는 base64가 그것을 해결해야한다고 제안했다. –

관련 문제