2013-01-04 31 views
0

我是Ruby的新手,我正在嘗試編寫一個腳本(Ruby 1.9.3,在Windows XP上),它將使用WIN32OLE庫自動從InDesign文檔中提取文本。紅寶石字符編碼shreelipi印度devenagari字體

InDesign文檔具有ShreeLipi字體(印度梵文腳本)中的文本。我的Ruby腳本是:

需要「WIN32OLE」

app = WIN32OLE.new('InDesign.Application') 
doc = app.activeDocument 
text_frame = doc.textFrames(1) 
text = text_frame.contents #=> "emhy ‘hmamOm§Mo ñ‘maH$ emhy {‘b‘ܶo C^mam" 
puts text.encoding.name #=> "IBM437" 
file = File.open('D:/try.txt','w') 
file.puts text 
file.close 

當我打開同一個文件用記事它顯示了查看全文:

"emhy `hmamOmMo ¤`maH$ emhy {`b`šo C^mam" 

我不明白這是爲什麼發生。請幫我糾正它。 我試圖使用Windows-1252編碼和ISO-8859-1解決它,但找不到解決方案。

+0

你明白字體和編碼不一樣吧?編碼是Ruby如何解釋二進制數據流。字體是您的操作系統如何根據二進制數據流在顯示器上點亮您的眼睛看到的像素。它們是非常不同的層次上的獨立的東西,Ruby不知道或關心字體。 –

+0

感謝您的回覆!你說正確的是字體和編碼是不同的東西。我擔心的是爲什麼字符在寫入文件後發生了變化。我期待它應該和它一樣。我錯過了一些需要考慮的事情嗎? – fellowman

回答

0

寫入文件時,您不保留字節。而不是做的:

file = File.open('D:/try.txt','w') 

使用:

file = File.open('D:/try.txt','wb') 

b意味着寫爲二進制,其中,用簡單的英語,意思是做無行尾轉換。

+0

再次感謝!我嘗試使用「wb」,但字符仍在改變...... – fellowman