如何在PYTHON

时间:2016-12-20 13:13:35

标签: python arabic-support

我正在使用Python 2.7,我尝试打印像这样的阿拉伯字符串

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

它提供以下输出:

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

目的是正确打印文本,而不是如何打印每一行。那么,如何以原始形式正确打印文本文件的字符串或内容?像:

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

8 个答案:

答案 0 :(得分:2)

试试这个:

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

输出:

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

演示:https://repl.it/EuHM/0

默认的Python2.7字符串与utf-8字符集一起使用。而阿拉伯语不包含在utf-8中。因此,如果您在前面添加u,那么它会将该字符串视为unicode字符串。

答案 1 :(得分:1)

import sys
text = "اطبع هذا النص".encode("utf-8")

text = "اطبع هذا النص".encode()

然后

sys.stdout.buffer.write(text)

输出

"اطبع هذا النص"

答案 2 :(得分:0)

在python 2.7中

在文件的最顶部,您可以声明:

# -*- coding: utf-8 -*-
print "ذهب الطالب الى المدرسة"

<强>更新

如果你可以运行:

# -*- coding: utf-8 -*-
s = "ذهب الطالب الى المدرسة"
with open("file.txt", "w", encoding="utf-8") as myfile:
    myfile.write(s)

生成的文件&#34; file.txt&#34;包含正确的字符串然后它是你在非python本身显示的任何问题,我想你可以尝试在其他东西中显示它,甚至可能是PyQt。

答案 3 :(得分:0)

您需要在代码

之前添加一些代码行
import sys
reload(sys)
sys.setdefaultencoding('utf-8')  
print "ذهب الطالب الى المدرسة"

答案 4 :(得分:0)

您可以在字符串前添加u这样的

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

或使自己与python3兼容并将其放在文件的顶部

from __future__ import unicode_literals

Python27 strings(或者在Python3中已知的bytestrings)不处理unicode字符。 uimport语句都使您的字符串与unicode兼容。

答案 5 :(得分:0)

通过此模块,您可以纠正文本形状的方向。 只需安装点并使用它即可。

# 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

答案 6 :(得分:0)

以下代码有效:

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)

答案 7 :(得分:0)

您有两个问题...首先您使用的是非阿拉伯字体或非 Unicode 文本...其次您需要一个这样的函数来混合纯阿拉伯字母并为您提供混合阿拉伯字母:

def mixARABIC(string2):
    import unicodedata
    string2 = string2.decode('utf8')
    new_string = ''
    for letter in string2:
        if ord(letter) < 256: unicode_letter = '\\u00'+hex(ord(letter)).replace('0x','')
        elif ord(letter) < 4096: unicode_letter = '\\u0'+hex(ord(letter)).replace('0x','')
        else: unicode_letter = '\\u'+unicodedata.decomposition(letter).split(' ')[1]
        new_string += unicode_letter
    new_string = new_string.replace('\u06CC','\u0649')
    new_string = new_string.decode('unicode_escape')
    new_string = new_string.encode('utf-8')
    return new_string