2009-10-06 9 views
3

필자는 모든 매개 변수 문자열로 전송되는 모든 데이터가 utf-8 일 것이라고 생각했습니다. 그 이유는 이것이 내 전체 사이트에서 사용 된 것이기 때문입니다. 나는 잘못했다. this example를 들어쿼리 매개 변수의 인코딩을 처리하는 방법은 무엇입니까?

이 UTF-8 (쿼리 문자열에서) 문서에 문자 ä을 가지고 있지만 보낼 진행한다 B\xe4ule 제출을 클릭합니다 (ISO-8859-1 또는 Windows 1252 중 하나 인). 그것은 또한 ajax request에서 시작됩니다.이 또한 utf8이 아닌 문자를 디코딩하는 데 실패합니다. 장고의

내 request.POST는 정말 엉망입니다 :

>>> print request.POST 
<QueryDict: {u'alias': [u'eu.wowarmory.com/character-sheet.xml?r=Der Rat von Dalaran&cn=B\ufffde']}> 

어떻게 난 그냥 모든 두통 거리 및 작업 UTF8에 갈 수 있는가?

+0

관련성이 있는지는 확실하지 않지만 설명서에는 양식 제출시 인코딩에 대한 내용이 나와 있습니다. http://docs.djangoproject.com/en/dev/ref/unicode/#form-submission – codeape

답변

0

AFAIK는 어디에도 지정되어 있지 않지만 모든 브라우저는 HTML 페이지의 문자 인코딩을 사용합니다. HTML 페이지의 문자 인코딩은 양식을 서버에 다시 제출하기위한 인코딩으로 포함합니다. URL 매개 변수를 UTF-8로 인코딩하려면 양식이 포함 된 HTML 페이지도 UTF-8로 인코딩되어 있는지 확인해야합니다.

+0

글쎄, 내가 준 페이지 예가 UTF-8로 제공 되었습니까? –

+0

페이지에서 선언 한 헤더에 전적으로 달려 있습니다. 또한, 아마도 뒤에서 서버가 보낸 HTTP 헤더 (이 메시지는 까다 롭습니다)에서 확인할 수도 있습니다. –

+0

글쎄, 내 페이지를 확인 :''및 헤더 :'Content-Type \t text/html; charset = utf-8' –

0

Get non-UTF-8-form fields as UTF-8 in PHP?에 따르면 페이지 자체가 UTF8 인코딩을 사용하는지 확인해야합니다.

+0

예를 들어 내가 준 페이지는 UTF-8로 제공 되었습니까? –

3

Django 1.0부터 폼 제출시 얻는 모든 값은 장황한 객체이기 때문에 Django 0.96 이하와 같은 bytestrings이 아닙니다. 당신의 가치에서 UTF-8을 얻기 위해 UTF-8 코덱을 인코딩 :

request.POST['somefield'].encode('utf-8') 

쿼리 매개 변수가 제대로 디코딩 얻으려면 제대로 첫번째 인코딩 할 수 있습니다

In [3]: urllib.quote('ä') 
Out[3]: '%C3%A4' 

내가 문제가 온다 생각 쿼리 매개 변수의 잘못된 인코딩으로 인해

1

<form/> 태그에도 accept-charset="UTF-8"을 추가해야합니다.

0

제출 양식에서 UTF-8 캐릭터 얻기 단지 유니 객체 코딩의 문제 같아야

다음 = request.POST [ '다음'인 코드 ("UTF-8")

.

AJAX 요청의 경우 해당 요청이 utf-8로 전송되고 헤더에 utf-8로 선언되었음을 확인할 수 있습니까?

관련 문제