在我的Java程序中,我有兩個字符串,s1并且s2在打印時它們看上去都相等,但是,因為它們的編碼方式不同,所以s1.equals(s2)返回false。我將如何比較這兩個字符串,以便即使它們的編碼方式不同,它們仍然相等?看下面的示例代碼: s1 = s1.trim(); s2 = s2.trim(); byte[] s1bytes = s1.getBytes(); byte[] s2bytes = s2.getBytes(); System.out.println(s1+","+s2+","+s1.equals(s2)); System.out.println("\ns1's bytes are:"); for (int i = 0; i < s1bytes.length; i++) { System.out.println(s1bytes[i]); } System.out.println("\ns2's bytes are:"); for (int i = 0; i < s2bytes.length; i++) { System.out.println(s2bytes[i]); }打印:SHEOGMIOF,SHEOGMIOF,falses1's bytes are:-17-69-65837269797177737970s2's bytes are:837269797177737970正如你可以看到打印時s1和s2看起來是一樣的,相比當他們不相等的兩個字節數組是不同的。編輯:我的問題不同于此問題,因為我不是從文件中讀取數據,.java文件中的源代碼編碼方式不同,而不是其他文件中的數據編碼。
2 回答

HUWWW
TA貢獻1874條經驗 獲得超12個贊
從文件中讀取字符串時,請從字符串中刪除字節順序掩碼(BOM)。的字符代碼是"?\uFEFF?????"
public class Foo {
public static void main(final String[] args) {
final byte[] b1 = {-17, -69, -65, 83, 72, 69, 79, 71, 77, 73, 79, 70};
final byte[] b2 = {83, 72, 69, 79, 71, 77, 73, 79, 70};
final String s1 = new String(b1).replace("\uFEFF", "");
final String s2 = new String(b2).replace("\uFEFF", "");
System.out.println(s1);
System.out.println(s2);
System.out.println(s1.equals(s2));
}
}
印刷:
SHEOGMIOF
SHEOGMIOF
true
添加回答
舉報
0/150
提交
取消