我有一個複製從文本波斯文字,並寫下來,另一個在我的鍵盤:比較在JS的話有很奇怪的結果
a = 'ﺧﻮاب'
"ﺧﻮاب"
b='خواب'
"خواب"
//lets compare
a==b
false
有人能解釋我爲什麼? (你可以自己測試!)
我有一個複製從文本波斯文字,並寫下來,另一個在我的鍵盤:比較在JS的話有很奇怪的結果
a = 'ﺧﻮاب'
"ﺧﻮاب"
b='خواب'
"خواب"
//lets compare
a==b
false
有人能解釋我爲什麼? (你可以自己測試!)
Ť繼承人前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`
您也可以看看它與十六進制編輯器,看看它們有不同的十六進制代碼。您會注意到字符串之間的前兩個字符不同。
每個序列的前兩個字符是不同的:
a
:U + FEA7 U + FEEE ...b
:U + 062E U + 0648 ...他們看起來一樣的原因是a
使用「演示文稿形式」版本的字符在b
中,用於標記字符的加入組(例如,初始,中間或最終)。在這種情況下,ARABIC LETTER KHAH INITIAL FORM
和ARABIC LETTER WAW FINAL FORM
。這些將具有與由字體渲染器(ARABIC LETTER KHAH
和ARABIC LETTER WAW
)塑造的b
中的字符相同的視覺外觀。
這些a
中的表示字符只存在於用於向後兼容的Unicode中(Unicode現在使用不同的機制來編碼加入組),並且與b
中的那些字符相同。在a
字符將在規範化表C.
什麼是你的文本編輯器進行歸一化到字符
b
?我什麼都試過,但看起來相同 – Farsheed好了,現在VIM顯示問題 – Farsheed