我有一个波斯语,我从文本中复制了一个并在键盘上写下另一个:
a = 'ﺧﻮاب'
"ﺧﻮاب"
b='خواب'
"خواب"
//lets compare
a==b
false
有人可以解释我为什么吗? (你可以自己测试一下!)
答案 0 :(得分:3)
他们的前两个字母是不同的字符。
var a = 'ﺧﻮاب';
var b = 'خواب';
for ( var i = 0; i < a.length; i++ ){
console.log(a.charCodeAt(i));
}
for ( var i = 0; i < b.length; i++ ){
console.log(b.charCodeAt(i));
}
a 是
[65191, 65262, 1575, 1576]
b 是
[1582, 1608, 1575, 1576]
现在,如果我尝试这段代码:
var a = 'ﺧﻮاب';
var b = a; // Or you can copy and paste `a` value here.
a == b; // This will return `true`
答案 1 :(得分:2)
答案 2 :(得分:1)
答案 3 :(得分:1)
您也可以使用十六进制编辑器查看它,看看它们有不同的十六进制代码。您会注意到字符串之间的前两个字符是不同的。
答案 4 :(得分:1)
每个序列的前两个字符是不同的:
a
:U + FEA7 U + FEEE ...... b
:U + 062E U + 0648 ...... 它们看起来相同的原因是a
使用b
中字符的“演示形式”版本,用于标记角色的加入组(例如,初始,中间或最后)。在这种情况下,ARABIC LETTER KHAH INITIAL FORM
和ARABIC LETTER WAW FINAL FORM
。这些视觉外观与b
中由字体渲染器(ARABIC LETTER KHAH
和ARABIC LETTER WAW
)形成的字符具有相同的视觉效果。
a
中的这些表示形式字符仅存在于Unicode中以实现向后兼容性(Unicode现在使用不同的机制对连接组进行编码),并且在规范上等同于b
中的那些。 a
中的字符将在规范化表格C下标准化为b
中的字符。