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