相同的文本但不相等,如何转换为相同的编码?

时间:2019-06-28 07:50:43

标签: encoding character-encoding

我在文本处理方面遇到麻烦。

(A)'kháchhàng'

(B)'kháchhàng'

A和B相同,但是在代码上不相等。它们看起来一样,对吧?

通过按F12>控制台>粘贴'kháchhàng'==='kháchhàng'>输入

,您可以看到我的问题

我可以将A和B转换为相同的编码吗?又如何?

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,两个字符串(A)和(B)使用不同的归一化形式:(A)的NFC(规范组成),(B)的NFD(规范分解)

(A)khách hàngU+006B U+0068 U+00E1 U+0063 U+0068 U+0020 U+0068 U+00E0 U+006E U+0067

(B)khách hàngU+006B U+0068 U+0061 U+0301 U+0063 U+0068 U+0020 U+0068 U+0061 U+0300 U+006E U+0067

为了比较它们是否相等,必须首先将两个字符串规范化为相同形式;在JavaScript中,可以通过normalize()方法来实现:

let A = 'khách hàng';
let B = 'khách hàng';
console.log (A === B); // -> false
console.log (A.normalize ('NFC') === B.normalize ('NFC')); // -> true
console.log (A.normalize ('NFD') === B.normalize ('NFD')); // -> true

警告:根据您的网络浏览器,尤其是在Firefox或Safari中,复制或粘贴字符串(B)可能会导致字符串(A);似乎在“幕后”执行了意外的标准化步骤...