2010-01-04 78 views
1

是否有任何方法可以以不同於英語的語言對字符串進行正確排序?在德國,我們有Umlaute,例如'ä'應該按升序排列後的'a'。在Flex/AS3中使用特殊字符(ä,ö)進行字符串排序

我使用ObjectUtil.stringCompare(),但是卻讓那些特殊字符一直到結束。任何想法如何解決這個問題?我認爲區域設置(de_DE)會照顧它,但它不會。

感謝, 馬丁

+0

德國(和其他一些)排序aäbcd...,而瑞典(和一些其他)排序ABCDE ......zåäö和挪威的排序ABCDE ......zäåö(我認爲),那麼你真的需要意識到您當前的語言環境。 – e8johan 2010-01-04 10:37:02

回答

0

在ECMAScript中第三版(並且因此這兩個ActionScript和當前瀏覽器的JavaScript)存在string.localeCompare方法。這會根據當前客戶端區域設置進行比較。例如,如果我將系統語言環境設置爲「德語(德國)」,並將javascript:alert('ä'.localeCompare('b'))設置爲我的系統語言環境(以Windows術語「語言與您要使用的非Unicode程序的語言版本相匹配」),則獲得-1,但使用英語I得到1

這是一般可疑的依賴客戶端的語言環境雖然。根據客戶端操作系統的安裝情況,您的應用程序的工作方式會有所不同,用戶更改其系統區域設置並非易事,因爲它是在Web瀏覽器用戶界面中選擇不同的語言。如果可能的話我會避開它,並且:

  • 比較之前做一個特設的字符串替換(如äae)。如果你只是擔心一些變音符號,但是這對於覆蓋整個Unicode甚至整個拉丁變音符集是不可行的。

  • 嘗試做服務器端之間的比較,比的ECMAScript更好的角色模型支持的腳本語言。

0

您可以編寫自己的比較功能,並通過它來的Array.Sort(的compareFunction)。 compareFunction(a,b):int應比較兩個字符串,如果a> b則返回-1,如果a = b則返回0,如果a爲< b則返回1。 在這個函數中,你會想要比較你的字符串符號的符號,考慮到特殊的德國符號。

0

我不知道AS3,但支持區域設置應該有一個字符串或分揀過的語言環境感知比較功能,幾乎所有的語言。

對於實施例,在這裏是區域設置感知字符串比較localeCompare()的一個。

相關問題