6

在 Java 6 中,

System.out.println(String.valueOf('\u0130').toLowerCase());

打印 i ( u0069),但在 Java 7 中,它打印带有双点 ( u0069 u0307) 的 i。

我知道这是一个土耳其字符,但是如何使用此代码使 Java 7 打印与 v6 相同的输出?

System.out.println(inputText.toLowerCase());

还要确保代码可以处理国际文本,而无需将toLowerCase函数硬编码为仅使用土耳其语区域设置。

4

1 回答 1

7

一篇关于这个 i toLowerCase 问题的非常详细的博客文章


让我试着总结一下基本部分:

在 Java 7 中,此方法确实发生了变化,并且处理此字符的方式与 Java 6 不同。添加了以下代码:

} else if (srcChar == '\u0130') { // LATIN CAPITAL LETTER I DOT
    lowerChar = Character.ERROR;
}

==> 此更改导致以下方式:

基本上,这种变化的最终结果是,对于这种特定情况(大写加点 I),Java 7 现在咨询一个特殊的 Unicode 字符数据库(http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt) ,它提供有关复杂案例映射的数据。查看这个文件,您可以看到几行大写的点 I:

CODE       LOWER   TITLE   UPPER  LANGUAGE
0130;  0069 0307;   0130;   0130;
0130;  0069;        0130;   0130;       tr;
0130;  0069;        0130;   0130;       az;
于 2014-05-07T17:37:56.847 回答