2015-12-03 72 views
3

我有一个复制从文本波斯文字,并写下来,另一个在我的键盘:比较在JS的话有很奇怪的结果

a = 'ﺧﻮاب' 
"ﺧﻮاب" 

b='خواب' 
"خواب" 

//lets compare 
a==b 
false 

有人能解释我为什么? (你可以自己测试!)

回答

3

Ť继承人前2个字母是不同的字符。

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)); 
} 

一个[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

找到这种差异的最简单方法是将其粘贴到文本编辑器中。

你可以看到这些字符导致不同的东西:

enter image description here

+0

什么是你的文本编辑器进行归一化到字符b?我什么都试过,但看起来相同 – Farsheed

+0

好了,现在VIM显示问题 – Farsheed

2

前两个字符不同,你可以在浏览器的控制台中运行a.split('')和b.split('')来看到不同之处。

enter image description here

1

每个序列的前两个字符是不同的:

  • a:U + FEA7 U + FEEE ...
  • b:U + 062E U + 0648 ...

他们看起来一样的原因是a使用“演示文稿形式”版本的字符在b中,用于标记字符的加入组(例如,初始,中间或最终)。在这种情况下,ARABIC LETTER KHAH INITIAL FORMARABIC LETTER WAW FINAL FORM。这些将具有与由字体渲染器(ARABIC LETTER KHAHARABIC LETTER WAW)塑造的b中的字符相同的视觉外观。

这些a中的表示字符只存在于用于向后兼容的Unicode中(Unicode现在使用不同的机制来编码加入组),并且与b中的那些字符相同。在a字符将在规范化表C.