Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么equalsIgnoreCase()对字母æ;失败øå;当使用UTF-8时?_Java_Localization_Special Characters_Character Encoding - Fatal编程技术网

Java 为什么equalsIgnoreCase()对字母æ;失败øå;当使用UTF-8时?

Java 为什么equalsIgnoreCase()对字母æ;失败øå;当使用UTF-8时?,java,localization,special-characters,character-encoding,Java,Localization,Special Characters,Character Encoding,我无法打印/比较字母æå与大写字母ÆØ。我的代码运行在EclipseST2.5中的MacOSX10.6.4上,我已经将Eclipse设置为使用UTF-8而不是MacRoman。看起来,无论是等号signorecase、toUpperCase还是toLowerCase都不起作用,而且我无法将这些字母正确地打印到控制台上。你知道我错过了什么吗 例如: String ae1 = "æ"; String ae2 = "Æ"; System.out.println(ae1); System.out.pri

我无法打印/比较字母æå与大写字母ÆØ。我的代码运行在EclipseST2.5中的MacOSX10.6.4上,我已经将Eclipse设置为使用UTF-8而不是MacRoman。看起来,无论是等号signorecase、toUpperCase还是toLowerCase都不起作用,而且我无法将这些字母正确地打印到控制台上。你知道我错过了什么吗

例如:

String ae1 = "æ";
String ae2 = "Æ";
System.out.println(ae1);
System.out.println(ae2.toLowerCase());
if(ae1.equalsIgnoreCase(ae2))
 System.out.println("match");
else
 System.out.println("no match");
返回:

æ
ß
no match

您的输出清楚地表明您的源文件是UTF-8,但编译器被配置为以Mac OS Roman的形式读取源文件

既然您说您将Eclipse配置为使用UTF-8,那么您的配置可能有点错误或不完整

为了确保这是源编码不匹配的问题,可以用Unicode转义替换这些字符。在这种情况下,
equalsIgnoreCase()
按预期工作:

String ae1 = "\u00e6"; 
String ae2 = "\u00c6"; 

equals()不是用来比较自然语言的。您应该使用Collator:

嗯,您完全不清楚您处于以下哪种情况:

  • 正在正确编译字符串文本,
    equalsIgnoreCase
    失败,控制台失败
  • 您的字符串文本被错误地编译了——一旦您得到了垃圾数据,其他任何东西都不会起作用
我强烈建议您尝试使用
\uxxx
格式,以确保获得正确的输入数据。您可以通过打印出
(int)ae1.charAt(0)
的值并查看是哪个Unicode字符来分析当前代码


一旦你把事情分离出来,确定哪一个阶段失败了,你就可以适当地调整代码——无论是使用
Collator
还是其他方法。

我猜我的字符串文本被错误地编译了,因为编译器或eclipse配置不正确,但我还没弄明白是什么。不过,使用
\uxxx
格式确实解决了我的问题,所以我现在就不谈这个了

如果我偶然发现一个解决方案,我会把它贴在这里


谢谢你的回答

ApacheStringutils做什么?