2015-12-03 62 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.