web-dev-qa-db-ja.com

PYTHONでアラビア語のテキストを正しく印刷する方法

私はPython 2.7を使用していて、次のようなアラビア語の文字列を印刷しようとしています

print "ذهب الطالب الى المدرسة"

次の出力が得られます。

ط°ظ‡ط¨ ط§ظ„ط·ط§ظ„ط¨ ط§ظ„ظ‰ ط§ظ„ظ…ط¯ط±ط³ط©

目的はテキストを正しく印刷することであり、各行を印刷する方法ではありません。では、テキストファイルの文字列またはコンテンツを元の形式で正しく印刷するにはどうすればよいですか?お気に入り:

ذهب الطالب الى المدرسة
7
Mohammed Sy

このモジュールを使用すると、テキストの形状を方向に修正できます。ピップをインストールして使用するだけです。

# 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
3
Jalal Razavi

これを試して:

print u"ذهب الطالب الى المدرسة"

出力:

ذهب الطالب الى المدرسة

デモ: https://repl.it/EuHM/

デフォルトのPython2.7文字列は、utf-8文字セットで機能します。また、utf-8にはアラビア語は含まれていません。したがって、プレフィックスとしてuを付けると、その文字列はUnicode文字列として扱われます。

2
MYGz

次のコードが機能します。

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)
1
Waleed Mohammed

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で表示してみてください。

0
Dan-Dev

このように、文字列の前にuを付けることができます

print u"ذهب الطالب الى المدرسة"

または、python3と互換性を持たせて、これをファイルの先頭に配置します

from __future__ import unicode_literals

Python27 strings(またはPython3で知られているようにbytestrings)は、Unicode文字を処理しません。 uステートメントとimportステートメントはどちらも、文字列をUnicode互換にします。

0
yorodm

コードの前に行を追加する必要があります

import sys
reload(sys)
sys.setdefaultencoding('utf-8')  
print "ذهب الطالب الى المدرسة"
0
khelili miliana