我们正在使用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的排序
答案 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工作流程集成的任何详细信息,因此如果可以选择,我可能会尝试单独对事物进行排序。