先前在Netbeans中运行文件加载并抓取字符串条目进行比较产生可预测的结果:
(过度简化而触及问题的核心。)文件1:UTF-8编码文件2:ISO-8859-1编码
NETBEANS
String strFromFile1 = "A - B";
String strFromFile2 = "A - B";
(strFromFile1 == strFromFile2)求值为true。
然而,在将项目移动到Eclipse之后,我注意到有时字符串值会发生变化,并且只针对我的许多文件中的一个,有时会去掉破折号(-),没有可识别的模式:
ECLIPSE
String strFromFile1 = "A B";
String strFromFile2 = "A - B";
(strFromFile1 == strFromFile2)求值为false。
比较是正确的,但是为什么第一个字符串改变了?源文本文件没有更改。它们都包含了仪表盘。但是,每个文件的字符编码是不同的。
为什么会发生这种情况?为什么Eclipse选择忽略特定文件中的某些字符?其他相同编码类型的文件(ISO-8859-1, UTF-8)没有遇到此问题。
我怀疑这个问题与NetBeans与Eclipse环境的字符编码有关。
然而,将运行配置更改为Run As> Other> Encoding> UTF-8,对问题没有影响。
Eclipse中的设置必须在General级别更改:
Window> Preferences> Text File Encoding> Other> UTF-8
在更改此设置之后,问题得到了解决,并且所有使用字符串比较的测试都按照预期通过了(就像迁移到Eclipse之前在NetBeans中一样)。