試圖“將它們?nèi)哭D(zhuǎn)化”是解決問題的錯誤方法。
首先,你需要了解你想要做的事情的局限性。正如其他人所指出的,數(shù)字符號的存在是有原因的:它們本質(zhì)上是語言字母表中唯一的字母,有它們自己的意思/聲音等等:刪除這些標(biāo)記就像替換英語單詞中的隨機字母一樣。這甚至在你開始考慮西里爾語和其他基于腳本的文本之前,比如阿拉伯語,它們根本不能被“轉(zhuǎn)換”成英語。
如果你必無論出于什么原因,轉(zhuǎn)換字符,那么唯一明智的方法是首先縮小手頭任務(wù)的范圍??紤]輸入的來源-如果您正在為“西方世界”編寫一個應(yīng)用程序(盡可能好地使用一個短語),那么您就不太可能需要解析阿拉伯字符了。同樣,Unicode字符集包含數(shù)百個數(shù)學(xué)符號和圖形符號:用戶沒有(容易)的方式直接輸入這些符號,因此可以假定它們可以被忽略。
通過執(zhí)行這些邏輯步驟,您可以減少要解析的可能字符數(shù),從而使基于字典的查找/替換操作是可行的。然后,它就變成了創(chuàng)建字典的一小部分單調(diào)乏味的工作,而執(zhí)行替換則是一項瑣碎的任務(wù)。如果您的語言支持原生Unicode字符(就像Java那樣)并正確地優(yōu)化靜態(tài)結(jié)構(gòu),那么這樣的查找和替換往往會非???。
這來自于使用了一個應(yīng)用程序的經(jīng)驗,該應(yīng)用程序允許最終用戶搜索包含透明字符的書目數(shù)據(jù)。查找數(shù)組(在我們的例子中是這樣)可能需要一個人天的時間來生成,以覆蓋所有西歐語言的所有透明標(biāo)記。