2013-07-31 1 views
2

저는 Python 2.7 Django + AngularJS 앱을 가지고 있습니다. 데이터 모델에 공급되는 입력 필드가 있으며 데이터는 Angular의 $ http를 사용하여 서버로 전송됩니다. 입력 필드에 "é"문자가 포함되어 있으면 장고는 그것을 좋아하지 않습니다. "★ é"를 사용할 때 장고는 아무런 문제가 없습니다. latin1 문자 세트 외부에있는 별표 문자는 utf-8로 인코딩해야하지만 비 라틴 문자가 "é"인 경우 Angular는 데이터를 latin1로 보내어 파이썬 코드를 혼란스럽게합니다.AngularJS의 Latin1/UTF-8 인코딩 문제

장고에서 오류 메시지는 다음 UnicodeDecodeError 상기 데이터를 판독하기 위해 서버() 함수 simplejson.loads 알려주

잘못된 연속 바이트 'UTF8'코덱 위치 0 바이트 0xe9을 디코딩 할 수없는 입력 문자열에 é가 포함되어 별표가없는 경우 ISO-8859-1 (latin1) 인코딩을 사용하면 브라우저에서 가져 오는 데이터가 latin1이 아닌 것을 증명할 수 있습니다. 즉, latin1이 아닌 문자로 utf-8을 강제하지 않는 한 , 별처럼.

각도가 utf-8을 사용하여 항상 데이터를 보내도록 지시하는 방법이 있습니까?

서버로 데이터를 전송 각도 코드 : 데이터를 읽고

$http({ 
    url: $scope.dataUrl, 
    method: 'POST', 
    data: JSON.stringify({recipe: recipe}), 
    headers: {'Content-Type': 'application/json'} 
}).success(...).error(...); 

장고 코드 :

recipe = simplejson.loads(request.raw_post_data)['recipe'] 
+0

안녕 그냥 암 것두 기억 안나 여기에 설명 된대로이 가능한 경우 $ httpProvider.defaults.headers 구성 개체와 "동의 - 문자 집합을"HTTP 헤더를 변경하는 것입니다 : http://docs.angularjs.org/api /ng.$http – koolunix

답변

1

내가 transformRequest 구성 매개 변수를 사용하여 작동하는 한 가지 방법을 발견했다. 나는 인코딩 기능을 사용하고

transformRequest: function (data, headersGetter) { 
    return encode_utf8(JSON.stringify(data)); 
} 

function encode_utf8(s) { 
    return unescape(encodeURIComponent(s)); 
} 

을 찾아 http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.htmlhttp://www.JSON.org/json2.js에서 발견 된 JSON 라이브러리에서 설명했다.

+1

시도해도 여전히 실패합니다. ● ⚫ ☀ ⨂ ⨁ ⊕ ⊖ ⊛ ⦿ ⨀ ◎ ◉ ○ ○ ⚪ ⚬ ◯ ◐ ◑ ◓ ◒ ⧇ – Heliodor