土耳其人的小写字母点缀我

iki*_*mar 5 java turkish locale java-7

在Java 6中,

System.out.println(String.valueOf('\u0130').toLowerCase());
Run Code Online (Sandbox Code Playgroud)

打印i(u0069),但在Java 7中,它用双点(u0069 u0307)打印i .

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

System.out.println(inputText.toLowerCase());
Run Code Online (Sandbox Code Playgroud)

还要确保代码可以处理国际文本,而无需将toLowerCase函数硬编码为仅使用土耳其语语言环境.

don*_*uxx 6

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


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

在Java 7中,这个方法确实已经改变并且处理这个char的方式与Java 6不同.添加了以下代码:

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

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

基本上,这种变化的最终结果是,对于这种特定情况(大写字母点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;
Run Code Online (Sandbox Code Playgroud)