在Flex / AS3中使用特殊字符(ä,ö)进行字符串排序

时间:2010-01-04 09:43:26

标签: flex actionscript-3

有没有办法用不同的语言对字符串进行正确的排序?在德语中我们有Umlaute,例如'ä'应该按升序排序顺序排在'a'之后。

我正在使用ObjectUtil.stringCompare(),但它总是将这些特殊字符放在最后。任何想法如何解决这个问题?我认为语言环境(de_DE)会处理它,但事实并非如此。

谢谢, 马丁

3 个答案:

答案 0 :(得分:0)

您可以编写自己的比较函数并将其传递给array.sort(compareFunction)。 compareFunction(a,b):int应比较两个字符串,如果>则返回-1。 b,如果a = b,则为0;如果a = b,则为1。湾 在该功能中,您需要逐个符号地比较您的字符串,并考虑特殊的德语符号。

答案 1 :(得分:0)

我不知道AS3,但几乎所有支持Locale的语言都应该具有字符串或排序的语言环境感知比较功能。

例如,以下是区域设置感知字符串比较localeCompare()

答案 2 :(得分:0)

在ECMAScript第三版(以及ActionScript和当前浏览器JavaScript)中,有string.localeCompare方法。这会进行比较,具体取决于当前的客户端区域设置。例如,如果我将系统区域设置(在Windows术语中,“与您要使用的非Unicode程序的语言版本匹配的语言”)设置为“德语(德国)”并将javascript:alert('ä'.localeCompare('b'))设置为-1 1}},但是用英语我得到1

但是,依赖于客户端语言环境通常是有问题的。您的应用程序将根据客户端操作系统安装的不同而有所不同,并且用户更改系统区域设置并不像在Web浏览器首选UI中选择其他语言那样容易。如果可能的话,我会避免它,并且:或者:

  • 在比较之前进行ad-hoc字符串替换(例如äae)。如果您只担心一些变音符号,这可能没问题,但是覆盖整个Unicode甚至整个拉丁语变音集都是不可行的。

  • 尝试在服务器端进行比较,使用比ECMAScript更好的字符模型支持的脚本语言。