在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
函数硬编码为仅使用土耳其语区域设置。
答案 0 :(得分:6)
有一个非常详细的blog post about this i toLowerCase problem
让我试着总结一下基本部分:
在Java 7中,这个方法确实已经改变,并且处理这个char的方式与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;