2017-09-03 13 views
0

私はこのURL https://českébudějovice.mysite.com/を持っており、それはチェコの都市名です。誰かがそのURLにアクセスすると、サブドメインを抽出してCityモデルオブジェクトをクエリします。だから私は、Djangoのシティモデルをしていると、正常シェルを通して、その都市を照会できます。しかし、今日、私は「市のマッチングクエリが存在しない」と言って、生産上の歩哨に例外を受け取っPython Djangoでのチェコのunicode問題

>> 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と呼ばれ、国際的なドメイン名を表す有効な方法です。

あなたは、 'IDNA' コーデックを使用して文字列をデコードすることができます

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

あなたは、Python 3にしている場合は、Punycodeでのデコードにcodecsを使用しています。

+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

関連する問題