2017-09-27 195 views
0

我是Python的初學者。我正在使用Python 2.7.3。我試圖從阿拉伯語文本中讀取一些流程來完成我的程序設計。如何在python中讀寫阿拉伯語文件

但它打印不可讀輸出

這是我的代碼的腳本:

>>> fname = open (r"C:\Python27\نجود.txt ", "rb") 
>>> text = fname.read() 
>>> print text 
ï»؟ط§ظ„ط³ظ„ط§ظ… ط¹ظ„ظٹظƒظ… ط£ظ†ط§ ط¨طµط¯ط¯ طھط¬ط±ط¨ط© ظ‡ط°ط§ 
ط§ظ„ط¨ط±ظ†ط§ظ…ط¬ ظپظٹ ط¨ط§ظٹط«ظˆظ†. ط¨ط§ظٹط«ظˆظ† ط±ط§ط¦ط¹ ظˆط¬ظ…ظٹظ„, ``ظˆظ„ظƒظ† طھط¬ط±ط¨ط© ط¨ط§ظٹط«ظˆظ† ظ…ط¹ ط§ظ„ط¹ط±ط¨ظٹ ط³طھظƒظˆظ† ظ…ط®طھظ„ظپط©!. ط¨ط§ظٹط«ظˆظ† ط±ط§ط¦ط¹ ظˆظٹط³طھط­ظ‚ ط§ظ„طھط¬ط±ط¨ط©. 

我試圖像許多解決方案:

text= fname.encoding() #or encode , but it did not work and gave me this error: 
######## 
text= fname.encoding() 
TypeError: 'NoneType' object is not callable 

試圖把# encoding: utf-8在代碼的頂部文件,但沒有給予任何改變。

也試着這樣做:

fname = open (r"C:\Python27\نجود.txt ", "r", encoding='utf-8') 

,但它給了我這個錯誤:

fname = open (r"C:\Python27\نجود.txt ", "r", encoding='utf-8') 
TypeError: 'encoding' is an invalid keyword argument for this function 

任何suggesions?提前致謝。

+0

輝煌視頻:https://www.youtube.com/watch?v=sgHbC6udIqc –

+0

我建議你閱讀關於Unicode的官方Python文檔:https://docs.python.org/2/howto/unicode.html因此,你將清楚地瞭解發生了什麼。 – user54

回答

0

從文件讀取將返回一個str其中,在Python2,是一個任意字節的字符串(這可能是Unicode字符的UTF-8編碼的字符串,但它也可以像一個JPG文件的內容二進制數據或類似)。

如果你知道它是字符的UTF-8編碼的字符串,你應該解碼它:

decoded = text.decode('utf8') 

這將產生一個unicode對象,它是Unicode字符的字符串。如果你處理這個問題,Python會盡力正確處理所有事情。例如,這取決於你的終端上,打印這應該按預期工作:

print decoded 
+0

在Python3中,順便說一句,事情是不同的。當打開一個文件時,可以/應該給出文件的編碼,並且從中讀取文件將已經返回一串Unicode字符(在Python3中稱爲「str」)。 – Alfe

+0

非常感謝,它的工作很好! –

+0

歡迎來到StackOverflow! 「謝謝」評論是沒有必要的。相反,如果答案是有用的,你應該放棄它(答案上方的向上三角形)。如果答案完全解決了您的問題(並且是幾個答案的最佳答案),您應該通過按下左側的複選標記來接受答案。這樣其他人可以快速找到解決方案。 – Alfe

0

首先,你需要在正確的編碼來打開文件。 Windows上的阿拉伯語通常是windows-1256或有時可能是utf-8

爲2.7.3,請確保您打開正確的文件:

import io 

with io.open(r"C:\Python27\نجود.txt ", "r", encoding="utf-8") as f: 
    for line in f: 
     print(line) 
對斯內德爾德在Python編碼
+0

是的,它的工作原理,謝謝 –