如何从PrimeFaces dataTables中的特殊字符(如İ,ı,Ç,ç,Ğ,ğ,ş,ö,...等)开始正确排序字符串?

时间:2012-07-20 07:38:33

标签: java hibernate

我们正在使用PrimeFaces 2.2(在Java EE 5项目中使用JSF 2.x),我们在使用PrimeFaces dataTables中的特殊字符(例如İstanbul,Çankaya,Ödemiş......)正确排序字符串时遇到了麻烦我们使用的是UTF-8。

问题是以特殊字符开头的单词放在以Z开头的单词的末尾,而例如,以“İ”开头的城市名称(即伊斯坦布尔)通常应该出现在Ibiza和Jacksonville之间,相反,它最终出现在苏黎世之后。此规则基于土耳其语(tr_TR)语言环境。

在selectOneMenus中,排序正确执行(并按上述要求)

对于解决方法的任何建议都将不胜感激。

_编辑_

此问题与基于hibernate(hsql)的排序有关,而不是基于sql的排序

3 个答案:

答案 0 :(得分:0)

这应该有点帮助,这里所有东西都会在排序

之前转换为基本的大写/小写字符
select k from test order by convert(k using utf8_bin)

答案 1 :(得分:0)

除非您知道单词的语言排序顺序,否则无法正确排序。如果单词是混合语言,则没有正确的排序顺序,但在这种情况下,人们通常会对大多数用户/受众使用语言排序顺序。

具有完全相同的声音和完全相同的Unicode代码点的完全相同的字符将根据语言甚至国家/地区在不同的地方排序。

以下是Unicode归类算法http://unicode.org/reports/tr10/

的定义

答案 2 :(得分:0)

区域设置感知排序是一项棘手的业务,因此可能最好处理专用库。我建议使用ICU。我无法提供有关如何将其与hsql工作流程集成的任何详细信息,因此如果可以选择,我可能会尝试单独对事物进行排序。