Django saklar unicode
dize kullanarak kod noktaları ve daha sonraki işlemler için Unicode olarak dizeyi tanımlar. UTF-8, dört 8 bit bayt kodlaması kullanır, bu nedenle Django tarafından kullanılan unicode
dizesinin kod noktası gösteriminin bir noktada UTF-8 notasyonuna kodlanması veya yorumlanması gerekir. Åland Adaları'nda, olması gereken şey, UTF-8 byte kodlamasını alıp dizgeyi dönüştürmek için kod noktaları olarak yorumlamasıdır.
django_countries döndürme dizgisi büyük olasılıkla u'\xc5land Islands'
'dır; burada \xc5
, Å'nin UTF kod noktası gösterimidir. UTF-8 bayt gösteriminde \xc5
, \xc3\x85
olur ve burada her bir \xc3
ve \x85
, 8 bitlik bir bayttır. Bkz: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc5&mode=hex
Yoksa country_label = fields.Country kullanabilirsiniz (form.cleaned_data.get ('ülke') [0: 2]). Name.encode ('utf-8') u'\xc5land Islands'
gitmek için '\xc3\x85land Islands'
sonra her bayt alıp kod noktaları olarak onları kullanırsanız, bu size bu karakterleri vereceğiz göreceksiniz: Ã…
bkz: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc3&mode=hex ve: html gösterimi ile http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=x85&mode=hex
bakınız kod parçacığı bu karakterler.
<div id="test">Ã…Å</div>
Bu yüzden size uygulamada 2 farklı kodlamaları var tahmin ediyorum. Tek yönlü
'\xc3\x85'
için
u'\xc5'
dönüştürmek ve daha sonra
u'\xc3\x85land Islands'
verecekti
iso-8859
den
unicode
için deşifre olur UTF-8'e bir utf-8 çevre kodlamak olacaktır
u'\xc5land Islands'
u'\xc3\x85land Islands'
noktasından hedefine. Ama sağladığınız kodda olmadığından,
country_label
'u ayarladığınız an ile çıkışınızın düzgün gösterilmediği an arasında bir yerde olduğunu tahmin ediyorum. Kodlama ayarları nedeniyle otomatik olarak veya bir yerlerde açık bir atama yoluyla.
İLK DÜZENLEME:
, uygulamanın sizin kodlamasını belirlemek Şablonunuzun içinde py dosyası ve <meta charset="UTF-8">
üstündeki # -*- coding: utf-8 -*-
ekleyin. Ve bir django.utils.functional gelen unicode dize almak için. proxy nesnesi ile unicode()
numaralı telefonu arayabilirsiniz.
country_label = unicode(fields.Country(form.cleaned_data.get('country')[0:2]).name)
İKİNCİ DÜZENLEME: Sorun force_bytes
(https://docs.djangoproject.com/en/1.8/ref/utils/#module-django.utils.encoding) kullanmak olacaktır nerede anlamaya
bir diğer yolu bu gibi:
from django.utils.encoding import force_bytes
country_label = fields.Country(form.cleaned_data.get('country')[0:2]).name
forced_country_label = force_bytes(country_label, encoding='utf-8', strings_only=False, errors='strict')
Ama senin beri böyle Çok sayıda dönüşüm başarılı olmadan denedi, belki sorun daha karmaşıktır. django_countries
, Python
sürümünüzü ve django uygulama dil ayarlarınızı paylaşabilir misiniz? Ayrıca yapabileceğiniz şey, doğrudan djano_countries
paketinizde (python dizininizde olması gereken) doğrudan görün, data.py dosyasını bulun ve neye benzediğini görmek için açın. Belki de veri bozuktur.
her iki çözüm de çalışmaz. İkincisi istisna verir. İkinci seçenek I 'UnicodeDecodeError UnicodeDecodeError olsun: 'UTF-8' kodek pozisyonunda 0 bayt 0xc5 deşifre: geçersiz devam bayt ' – Maverick