2012-12-14 34 views
1

我是一個Python新手,我正在嘗試編寫一個將文本文件(以特定格式編寫)解析爲XML文件的Python腳本。文本文件是用非歐洲語言編寫的,編碼爲UTF-8(從右向左寫),這一點給我帶來一些麻煩。在Python中將UTF-8解析爲XML

文本文件的格式:

{number}"|"{number}"|" {text in UTF-8} 

其中的一個例子是:

1|2|حمد ހުރީ، عالم ތަކުގެ ވެރި اللَّه އަށެވެ 

最初的問題是,從所述文本讀取時,這些詞的排序是圍繞在Python切換。 如果正文如下: 1 | 2 | ABC DEF,Python會將其顯示爲1 | 2 | DEF ABC 這顯然是不正確的。

我使用file = open("text.txt")並在其上運行readlines()以獲取文本。

爲了糾正這個錯誤,我試圖嘗試split()分開的話,並把它們放在一個列表,然後根據需要重新整理它們,但在這種情況下,有可能是一個轉換錯誤,我收到垃圾字符。將這些UTF-8字符存儲到Python列表中並檢索它們時存在問題;字符不會被保留。

如果這個列表處理錯誤是固定的,那麼編寫XML文件應該是小菜一碟。

編輯:如果有幫助,語言是Dhivehi,字母是Thaana。

+0

你看過['codecs.open'](http://docs.python.org/2/library/codecs.html#codecs.open)嗎?它*使用給定的模式打開一個編碼文件,並返回提供透明編碼/解碼*的包裝版本。 – miku

+0

我嘗試使用編解碼器,它沒有幫助。句子中的單詞還在翻轉。 – arkate

+0

那麼原始問題是什麼?拉丁字符顯示順序不正確?還是阿拉伯語?爲什麼你需要列表處理修復,如果它只是一個企圖破解? – Esailija

回答

2

Python只在內部很弱地支持BIDI渲染。也就是說,它沒有完全實現Unicode Bidirectional Algorithm

但是,這並不重要,除非你直接在Python中進行文本佈局。對於你所描述的項目(閱讀帶有一些BIDI文本的文件並輸出具有相同文本的另一個文件),Python將會很好。這是因爲文件中文本的排序(包括輸入和輸出)將反映語義順序,而不是文本在最終用戶屏幕上顯示的方向。如果您生成XML文件並使用支持BIDI的閱讀器(如大多數Web瀏覽器)打開它,則應該看到以正確順序顯示的文本。

爲了供您參考,還有幾個模塊爲Python的雙向文本渲染提供了更好的支持。其中一個是python-bidi,對於大多數具有從右到左文本的語言來說,它顯然工作得很好,但尚未正確處理阿拉伯文字母的形狀。另一個是pyfribidiGNU fribidi庫的綁定,該庫顯然只能在Linux(以及其他類Unix操作系統)上輕鬆編譯。我沒有使用過這些,所以我不能提供個人建議。