我有一个复制从文本波斯文字,并写下来,另一个在我的键盘:比较在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