2014-11-26 4 views
0

나를 미치게하는 문제가 있습니다 ...Python/Django 인코딩 문제

나는 장고 달력 응용 프로그램을 만들고 싶습니다. 이벤트로 캘린더에 피드를 업로드 할 수있는 사이트를 만들었습니다. 포커스는 업로드를 처리하는 방법이어야합니다. 여기에 업로드 된 파일을 저장하고 iCalendar (파이썬 모듈)로 내용을 파싱하고 싶습니다. 내용을 읽은 후 ics 파일의 이벤트를 데이터베이스에 저장할 수있는 이벤트로 변환하려고합니다. 오류는 모듈 e.save()를 저장하려고 할 때 발생합니다 ... 독일어 umlaute ö ä Ü ß 등의 문제가 있습니다 ... 여러분도 알다시피 나는 이미 utf-8로 요약을 인코딩하려고 시도했지만 문제와 ... 그리고 아이디어를 만난다?

감사

내 양식 :

class UploadFileForm(forms.Form): 
file = forms.FileField() 

내 모델

class Event(models.Model): 
title = models.CharField(max_length=255) 
start = models.DateTimeField() 
end = models.DateTimeField() 
url = models.CharField(max_length=255) 

내보기

if request.method == 'POST': 
    form = UploadFileForm(request.POST, request.FILES) 
    if form.is_valid(): 
     handle_upload(request) 
     return HttpResponseRedirect(reverse("app:site")) 
else: 
    form = UploadFileForm() 

return TemplateResponse(
    request, 
    'app/site.html', 
    {'form' : form}, 
) 

내 방법은 업로드 처리하는

아스키 오류가 어디에서 오는 그대로
fname = request.FILES['file'].name 
f = request.FILES['file'] 

with open('app/media/import/%s' % fname, 'wb+') as destination: 
    for chunk in f.chunks(): 
     destination.write(chunk) 

g = open('app/media/import/%s' % fname, 'rb') 

cal = Calendar.from_ical(g.read()) 

for event in cal.walk('vevent'): 
    title = str(event.get('summary')).encode('utf-8') 
    start = format_date(event.get('dtstart').to_ical()) 
    end = format_date(event.get('dtend').to_ical()) 

    e = Event(title=title, start=start, end=end) 
    e.save() 

오류

Environment: 
Request Method: POST 
Request URL: domain:8000/site/source/ 

Django Version: 1.6.7 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'myApp') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    112.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/user/mySite/myApp/views.py" in source 
    24.    handle_upload(request) 
File "/home/user/mySite/myApp/utils.py" in handle_upload 
    20.   title = str(event.get('summary')).encode('utf-8') 

Exception Type: UnicodeEncodeError at /calendar/source/ 
Exception Value: 'ascii' codec can't encode character u'\xdf' in position 3: ordinal not in range(128) 
+0

* *는 오류가 발생 했습니까? 전체 * 추적 표시. –

+1

str()은 ASCII 오류가 발생한 곳에서 사용하면 안됩니다. encode를 사용하기 만하면됩니다. 아니면 str 대신 유니 코드를 사용하십시오 –

+0

Vajk ... 도와 줘서 고마워요 ... 이제 답을 답으로 게시하고 덧글이 아니라면 제가 평가할 수 있습니다. 감사합니다. – Rooterle

답변

0

당신은 STR()를 사용하지 말아야합니다. 단순히 encode를 사용하십시오. 또는 str 대신 유니 코드를 사용하십시오. - Vajk Hermecz