两个完全相同的阿拉伯字母"因为它们出现"在NetBeans中不相等

时间:2017-11-26 12:19:41

标签: java utf-8 equals arabic

我正在使用Netbeans编写一个java软件。作为调试代码的一部分,我遇到了以下问题。我有一个代码,比较两个似乎完全相同的阿拉伯字母。我复制了数据库中的字母。我希望代码能够找到它们相同,但它并没有。以下是我的代码:

    String a = "و";
    String b ="و";
    System.out.println(a.equals(b));

注意:当我使用键盘写字母时,我得到" true"的输出,但是当我将它从数据库复制到变量" a"和" b"。输出为false。为什么呢?

1 个答案:

答案 0 :(得分:0)

比较Unicode字符并不是太难,但比你正在做的更为复杂。

您已复制并粘贴了两个字形。字形是代码点的图形表示。有时,当代码点不同时,字形相似(或相同)。在这种情况下,当.equals(...)测试看起来应该已经通过时,你将无法通过。

这可能由于多种原因而发生。一个常见的罪魁祸首是你的角色是“组成的”。为了支持某些系统,一个字符实际上可能由一个主代码点组成,并有一个额外的代码点来修改它。 (想象一下常见的拉丁字母,其重音被编码为第二个代码点)。 Unicode支持这一点,但它也有一个代码点,用于组合为一个字符的相同组合。

对于其他语言,可能还有其他类似的规则,当字形表示看起来相同时,.equals(...)的代码点比较失败。