以前在Netbeans中运行文件加载并获取String条目以进行比较产生了可预测的结果:
(过度简化以解决问题的核心。)文件1:UTF-8编码文件2:ISO-8859-1编码
NETBEANS
String strFromFile1 = "A - B";
String strFromFile2 = "A - B";
(strFromFile1 == strFromFile2)评估为true。
但是,在将项目移动到Eclipse之后,我注意到有时字符串值会发生变化,并且仅针对我的许多文件之一,有时会删除短划线( - ),没有可辨别的模式:
日食
String strFromFile1 = "A B";
String strFromFile2 = "A - B";
(strFromFile1 == strFromFile2)评估为false。
比较是正确的,但为什么第一个字符串会改变?源文本文件没有更改。他们都包含破折号。但是,每个文件的字符编码是不同的。
为什么会这样?为什么Eclipse选择忽略特定文件中的某些字符?具有相同编码类型(ISO-8859-1,UTF-8)的其他文件未遇到此问题。
我怀疑这个问题与NetBeans vs Eclipse环境字符编码有关。
但是,将运行配置更改为运行方式>其他>编码> UTF-8,对此问题没有影响。
必须在常规级别更改Eclipse中的设置:
窗口>首选项>文本文件编码>其他> UTF-8
更改此设置后,问题得到解决,并且所有使用字符串比较的测试都按预期传递(就像在迁移到Eclipse之前一样在NetBeans中)。