2016-11-04 11 views
1

私はPythonでسلامのようなアラビア文字列のUnicode表現を取得する方法を知っていますか?Djangoでアラビア文字列のUnicode表現を取得するには?

結果は\u0633\u0644\u0627\u0645

をする必要があり、私が必要とする私はMySQLのDBとRedisのキャッシュに保存されたデータから取得したテキストを比較できるようにします。

答えて

2

は、あなたが実際のUnicode文字列を持っていると仮定すると、あなたは

# -*- coding: utf-8 -*- 
s = u'سلام' 
print s.encode('unicode-escape')  

出力を行うことができます

\u0633\u0644\u0627\u0645 

# -*- coding: utf-8 -*-ディレクティブは、ソースコードがUTF-8でエンコードされ、それはスクリプト自体はUnicodeをどのように処理するかとは関係ありませんというインタプリタを伝えるために純粋です。スクリプトがUTF-8でエンコードされたソースからのアラビア語の文字列を読んでいる場合


、バイトは次のようになります。

\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85 

あなたはこのようにUnicodeにそれを変換することができます:

data = '\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85' 
s = data.decode('utf8') 
print s 
print s.encode('unicode-escape') 

出力

سلام 
\u0633\u0644\u0627\u0645 

もちろん、端末がUnicodeを適切に処理できるように設定する必要があります。

'\u0633\u0644\u0627\u0645' 

は24のバイトを含むプレーン(バイト)の文字列であること

注、

u'\u0633\u0644\u0627\u0645' 

に対し4つのUnicode文字を含むUnicode文字列です。

この記事は役に立ちましたか?はい。ベテランのNed Batchelderによって書かれたPragmatic Unicodeです。

+0

これは端末で動作しますが、出力を新しい変数に割り当てる必要があります。私のviews.pyで 'print'を使って行うことはできません。これを修正するためのアイデアですか? – supermario

+1

@supermarioこのようなものはうまくいくはずです: 'a = s.encode( 'unicode-escape')' –

0

uの文字列をPython 2.xに挿入すると、文字列がユニコード文字列になります。次に、ユニコード文字列のメソッドencodeを呼び出すことができます。

arabic_string = u'سلام' 
arabic_string.encode('utf-8') 

は出力:Python用

print arabic_string.encode('utf-8') 
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85' 
+0

これはエラーyeilds: '「ASCII」コーデックは位置0-3の文字をエンコードすることはできません:序ない範囲内(128)' – supermario

+0

あなたはPythonのバージョンを使用しているの? – JClarke

+0

私はPython 2.7.6を使用しています – supermario

0

2.7

string = 'سلام' 
new_string = unicode(string) 
+0

端末で 'string'を表示しても'سلام'です。さらに、比較は期待どおりに行われません。 – supermario

+0

申し訳ありませんただそれを割り当てます – Navidad20

0

Python 2.xを使用しているので、encodeを使用することはできません。文字列をUnicodeオブジェクトにキャストするには、unicode関数を使用する必要があります。

> f='سلام' 
> f 
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85' 
> unicode(f, 'utf-8') # note: you need to pass the encoding parameter in or you'll 
         # keep having the same problem. 
u'\u0633\u0644\u0627\u0645' 
> print unicode(f, 'utf-8') 
سلام 

私はあなたがコンテンツを取得するために使用しているものをライブラリわからないんだけど、あなたは最初にUnicodeとしてデータをフェッチすることができるかもしれません。

> f = u'سلام' 
> f 
u'\u0633\u0644\u0627\u0645' 
> print f.encode('unicode-escape') 
\u0633\u0644\u0627\u0645 
> print f 
سلام 
関連する問題