我正在使用Python 2.7尝试打印像这样的阿拉伯字符串
print "ذهب الطالب الى المدرسة"
它会输出以下结果:
ط°ظ‡ط¨ ط§ظ„ط·ط§ظ„ط¨ ط§ظ„ظ‰ ط§ظ„ظ…ط¯ط±ط³ط©
目的是正确地打印文本,而不是如何打印每一行。那么,我如何以其原始形式正确地打印字符串或文本文件的内容?例如:
ذهب الطالب الى المدرسة
我正在使用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
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)
试试这个:
print u"ذهب الطالب الى المدرسة"
输出:
ذهب الطالب الى المدرسة
默认的Python2.7字符串使用utf-8字符集。阿拉伯语不包含在utf-8中。因此,如果您在字符串前加上u
,它将把该字符串视为Unicode字符串。
print "ذهب الطالب الى المدرسة".encode('utf-8','ignore')
- Mohammad Yusuf# coding=utf-8
,我在 repl.it 上尝试重新创建这个答案时遇到了这个问题: https://repl.it/@dralletje/Arabic-String#main.py - Michiel Dralimport sys
text = "اطبع هذا النص".encode("utf-8")
或者
text = "اطبع هذا النص".encode()
那么
sys.stdout.buffer.write(text)
输出
"اطبع هذا النص"
你有两个问题...首先,你正在使用非阿拉伯字体或非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
# -*- 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。
你需要在你的代码前面添加一些行
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print "ذهب الطالب الى المدرسة"
你可以像这样在字符串前加上u
print u"ذهب الطالب الى المدرسة"
或者使自己与Python3兼容,并将此代码放在文件顶部
from __future__ import unicode_literals
字符串
(或在Python3中称为字节串
)不能处理Unicode字符。使用u
和import
语句可以使您的字符串与Unicode兼容。
echo ذهب
并按 Enter,它是否会按预期打印阿拉伯语单词? - Flimm