Collat​​or不适合给定的Locale

mkv*_*cvc 6 java sorting collation internationalization

这是区域设置字母顺序:维基百科
这是我的代码:

public static void main(String[] args) {
    Locale loc = new Locale("sr","RS");

    Collator col = Collator.getInstance(loc);
    col.setStrength(Collator.SECONDARY);

    List<String> slova = new ArrayList<String>();

    slova.add("Austrija");
    slova.add("Slova?ka");
    slova.add("?");
    slova.add("?");
    slova.add("C");
    slova.add("Gr?ka");
    slova.add("Slovenija");
    slova.add("Španija");
    slova.add("Švajcarska");
    slova.add("Švedska");
    slova.add("Srbija");

    Collections.sort(slova,col);

    for(String s: slova)
        System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

Austrija
ç
Č
Grčka
Slovačka
斯洛文尼亚
Španija
Srbija的
Švajcarska
Švedska
Đ

正如您从上面的链接中看到的,这不是正确的顺序.
我究竟做错了什么?

mkv*_*cvc -1

刚刚发现这是一个由政治和语言环境引起的已知问题。感谢帮助。

  • 我对此不太确定。排序规则由 Unicode 标准 (unicode.org) 的各个版本捕获。当前标准版本(6.0)可能对塞尔维亚有正确的排序规则,但 Java 实现了一些以前的快照。请查看 ICU 的实现:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collat​​or.html,看看它的排序方式是否正确。 (2认同)