私はPython 2.7を使用していて、次のようなアラビア語の文字列を印刷しようとしています
print "ذهب الطالب الى المدرسة"
次の出力が得られます。
ط°ظ‡ط¨ ط§ظ„ط·ط§ظ„ط¨ ط§ظ„ظ‰ ط§ظ„ظ…ط¯ط±ط³ط©
目的はテキストを正しく印刷することであり、各行を印刷する方法ではありません。では、テキストファイルの文字列またはコンテンツを元の形式で正しく印刷するにはどうすればよいですか?お気に入り:
ذهب الطالب الى المدرسة
このモジュールを使用すると、テキストの形状を方向に修正できます。ピップをインストールして使用するだけです。
# install: pip install --upgrade arabic-reshaper
import arabic_reshaper
# install: pip install python-bidi
from bidi.algorithm import get_display
text = "ذهب الطالب الى المدرسة"
reshaped_text = arabic_reshaper.reshape(text) # correct its shape
bidi_text = get_display(reshaped_text) # correct its direction
これを試して:
print u"ذهب الطالب الى المدرسة"
出力:
ذهب الطالب الى المدرسة
デフォルトのPython2.7文字列は、utf-8文字セットで機能します。また、utf-8にはアラビア語は含まれていません。したがって、プレフィックスとしてu
を付けると、その文字列はUnicode文字列として扱われます。
import arabic_reshaper
text_to_be_reshaped = 'اللغة العربية رائعة'
reshaped_text = arabic_reshaper.reshape(text_to_be_reshaped)
rev_text = reshaped_text[::-1] # slice backwards
print(rev_text)
python 2.7では
ファイルの最上部で、次のように宣言できます。
# -*- coding: utf-8 -*-
print "ذهب الطالب الى المدرسة"
更新:
これを実行できる場合:
# -*- coding: utf-8 -*-
s = "ذهب الطالب الى المدرسة"
with open("file.txt", "w", encoding="utf-8") as myfile:
myfile.write(s)
そして、生成されたファイル「file.txt」に正しい文字列が含まれている場合、python自体ではなく、表示しているものに問題があります。他の何か、おそらくPyQtで表示してみてください。
このように、文字列の前にu
を付けることができます
print u"ذهب الطالب الى المدرسة"
または、python3と互換性を持たせて、これをファイルの先頭に配置します
from __future__ import unicode_literals
Python27 strings
(またはPython3で知られているようにbytestrings
)は、Unicode文字を処理しません。 u
ステートメントとimport
ステートメントはどちらも、文字列をUnicode互換にします。
コードの前に行を追加する必要があります
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print "ذهب الطالب الى المدرسة"