2012-03-27 4 views
2

작년에 클라이언트를위한 대시 보드와 API를 모두 사용하는 django 사이트를 만들었습니다.django + unicode 상수 오류

때로 유니 코드 정보 (대개 Microsoft 키보드와 작은 따옴표 문자를 사용하여!)를 데이터베이스에 저장합니다.

그것은 모든이 하나 개의 인스턴스를 변경 괜찮지 만 제가 지속적으로 얻을 것은 새로운 캐릭터 내가하지 "변환"을 가지고 추가 할 때이 오류 같은 것입니다 :

UnicodeDecodeError에서/XX/xxxxx는/API/xxx.json

위치 0 바이트 0xeb를 디코딩 할 수

'ASCII'코덱 : 범위 내에 있지 서수 (128)

문제는 I 변환 할 수 있어야한다는 실제로 이 유니 코드 (모델에서)를 HTML로 변환합니다.

# if a char breaks the system, replace it here (duplicate line) 
text = unicode(str(text).replace('\xa3', '£')) 

이 줄은 여기에 중복되어 있지만 그 외의 경우에는 중복됩니다.

을 알기 때문에 머리가 찢어지며 나는 어딘가에 현저하게 어리석은 짓을하고 있습니다.

다른 곳에서 검색 한 결과 내 문제가 새롭지는 않지만 다른 곳에서 답을 찾을 수 없다는 것을 깨달았습니다.

+0

다음은 유니 코드 통증을 수정하기위한 좋은 소개입니다. http://bit.ly/unipain –

답변

0

나는 text이 유니 코드라고 가정합니다. \xa3£ 문자의 유니 코드이므로 안전한 가정으로 보입니다.

왜 인코딩해야하는지 모르겠습니다. 텍스트가 템플릿의 출력에서 ​​utf-8로 변환 될 것이므로 모든 브라우저에서 완벽하게 표시 할 수 있습니다. 아마도 무언가 (아마 당신의 코드, 불행히도)가 ASCII를 가정하고, 암시 적 변환이 상황을 망가 뜨리는 선 아래로 더 많은 가능성이 있습니다. 이 경우

, 당신은이 작업을 수행 할 수 있습니다 : £ 같은 HTML/XML 엔티티에 비 ASCII 문자로 변환

text = text.encode('ascii', 'xmlcharrefreplace') 

합니다.

+0

heh ... 여기 여러 가지 방법을 시도해 봤습니다. 나머지 코드보다 먼저이 행을 넣으십시오. 작동하는 것처럼 보입니다! 탁탕 치다! 감사 – padajo

0

JSON 디코더에 json 파일을 유니 코드로 디코딩 할 것이라고 알려줍니다. 직접 json 모듈을 사용하는 경우는이 코드를 사용하여 수행 할 수 있습니다 다음 JSON 디코딩은 다른 모듈을 통해 이루어지는 경우

json.JSONDecoder(encoding='utf8').decode(
    json.JSONEncoder(encoding='utf8').encode('blä')) 

을 (장고, ...) 어쩌면 당신이 다른 모듈에 통해 정보를 전달할 수 있습니다 json 물건.