私はPythonでسلام
のようなアラビア文字列のUnicode表現を取得する方法を知っていますか?Djangoでアラビア文字列のUnicode表現を取得するには?
結果は\u0633\u0644\u0627\u0645
をする必要があり、私が必要とする私はMySQLのDBとRedisのキャッシュに保存されたデータから取得したテキストを比較できるようにします。
私はPythonでسلام
のようなアラビア文字列のUnicode表現を取得する方法を知っていますか?Djangoでアラビア文字列のUnicode表現を取得するには?
結果は\u0633\u0644\u0627\u0645
をする必要があり、私が必要とする私はMySQLのDBとRedisのキャッシュに保存されたデータから取得したテキストを比較できるようにします。
は、あなたが実際の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です。
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'
これはエラーyeilds: '「ASCII」コーデックは位置0-3の文字をエンコードすることはできません:序ない範囲内(128)' – supermario
あなたはPythonのバージョンを使用しているの? – JClarke
私はPython 2.7.6を使用しています – supermario
2.7
string = 'سلام'
new_string = unicode(string)
端末で 'string'を表示しても'سلام'です。さらに、比較は期待どおりに行われません。 – supermario
申し訳ありませんただそれを割り当てます – Navidad20
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
سلام
これは端末で動作しますが、出力を新しい変数に割り当てる必要があります。私のviews.pyで 'print'を使って行うことはできません。これを修正するためのアイデアですか? – supermario
@supermarioこのようなものはうまくいくはずです: 'a = s.encode( 'unicode-escape')' –