2012-04-17 24 views
0

一些背景:在梵文字體中,相同的字符代碼可以被視覺地表示爲不同的字符。在一種字體中,'10'可以在視覺上表示爲'A',而在另一種字體中'10'可以在視覺上表示爲'B'。所以如果我選擇文本並更改字體,那麼字符也會改變。有趣的是,鍵盤上的按鈕也一樣。按一個字體的'A'將顯示'A',在另一個字體中按'A'將顯示'B'。識別任意文本中的外文字體

我想要做的是,確定粘貼到我的軟件中的某些文本中使用的字體,以便字體改變時,我可以以編程方式將字符更改爲新字體的相同內容。

任何關於如何去做這件事的指針?

+0

你在說非Unicode梵文字體嗎?我不明白爲什麼你會遇到這個問題,如果字體使用Unicode編碼。我可以*絕對*看到它可能是一個老式的,非Unicode梵文字體的問題。 – djangodude 2012-04-29 15:20:25

+0

是的,非unicode devnagri字體 – 2012-05-26 09:31:07

回答

1

對於非Unicode字體,完成此操作的唯一方法是對每個字體的映射有一定的瞭解。這是有問題的,因爲即使有a non-Unicode encoding standard,很多梵文/北印度語字體會忽略它或進行修改和添加,從而導致上面描述的情況(例如,一個字體中的鍵「A」可能對應於形狀'म',而' '另一種字體'的形狀''...只是理論上的例子)。

至少有一個conversion tool可以幫助您,但最終歸結爲將輸入字體特定的編碼轉換爲輸出字體特定的編碼。如果你有一個特定的字體映射到Unicode爲每個特定的字體映射,你可以使用Unicode作爲中介和轉換到/從你的任何字體的方案......一些事情,如:

font   font-specific code Unicode 
----   ------------------ ------- 
MyFont  0001     U+0021 
MyFont  0002     U+0022 
... 
MyOtherFont 00F1     U+0021 
MyOtherFont 00F2     U+0022 
... 

有了這些映射的完整數據庫,您可以很容易地將「MyFont」中設置的文本轉換爲「MyOtherFont」文本。

當然,最好的替代,如果可能的話,將字體和文本轉換爲Unicode,但......但這可能是不可能的。

+0

我已經結束了使用一些啓發式/統計分佈來首先猜測文本是哪種字體(來自已知樣本的加權頻率),然後將其轉換爲Unicode。還有很長的一段路要走,我需要將大量已知樣本加工成任何精度。 – 2012-06-02 06:33:58