2017-09-03 2 views
0

)이 URL은 https://českébudějovice.mysite.com/이며 체코의 도시 이름입니다. 누군가 해당 URL에 액세스하면 하위 모델을 추출하고 City 모델 객체를 쿼리합니다. 그래서 장고 도시의 모델이 성공적으로 쉘을 통해 그 도시 조회 할 수 있습니다체코 어 유니 코드 문제 (Python Django

>> City.objects.get(name='českébudějovice') 
>> <City: České Budějovice, Czech Republic> 

그러나 오늘은 '시 일치하는 쿼리가 존재하지 않는'와 URL은 다음과 같이 표시되어 있는지 말 생산에 센트리에 예외를 받았습니다 :

xn--eskbudjovice-deb41c5g.mysite.com 

분명히, 나는 이름이 'XN - eskbudjovice-deb41c5g'이있는 도시가없는 때문에 내가지고있어 오류 '시티 일치하는 쿼리가 존재하지 않습니다'.

저는 이상한 하위 도메인을 실제 이름으로 변환하려고 시도했지만 행운은 없습니다. 나는 다음 시도했다 :

>> s='xn--eskbudjovice-deb41c5g' 
>> print s.encode('utf8') 
>> xn--eskbudjovice-deb41c5g 

내가 Cloudflare을 사용하고 있는데 어떻게 든 내 서버에 유니 코드로 서비스를 제공하는 대신 해당 양식에 URL을 변환하는 것 궁금.

+1

도메인 이름의 인코딩은 utf8이 아닙니다. https://en.wikipedia.org/wiki/Internationalized_domain_name을 참조하십시오. – pvg

답변

3

이 주소는 Punycode이며 국제 도메인 이름을 나타내는 유효한 방법입니다. 퓨니를 디코딩 codecs를 사용

>>> s = 'xn--eskbudjovice-deb41c5g' 
>>> print(s.decode('idna')) 
českébudějovice 

파이썬 3 일 경우 :

당신은 'IDNA'코덱을 사용하여 문자열을 디코딩 할 수있다.

+1

spasibo bratan :) – if237912print

0
$ python 
Python 2.7.9 (default, Aug 13 2016, 16:41:35) 

>>> 'xn--eskbudjovice-deb41c5g'.decode('idna') 
u'\u010desk\xe9bud\u011bjovice' 

>>> print 'xn--eskbudjovice-deb41c5g'.decode('idna') 
českébudějovice 
+0

확실하지 왜 downvotes, 좋은 대답뿐 아니라 – if237912print