我在文本处理方面遇到麻烦。
(A)'kháchhàng'
(B)'kháchhàng'
A和B相同,但是在代码上不相等。它们看起来一样,对吧?
通过按F12>控制台>粘贴'kháchhàng'==='kháchhàng'>输入
,您可以看到我的问题我可以将A和B转换为相同的编码吗?又如何?
谢谢!
答案 0 :(得分:2)
是的,两个字符串(A)和(B)使用不同的归一化形式:(A)的NFC
(规范组成),(B)的NFD
(规范分解)
(A)khách hàng
:U+006B U+0068 U+00E1 U+0063 U+0068 U+0020 U+0068 U+00E0 U+006E U+0067
(B)khách hàng
:U+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);似乎在“幕后”执行了意外的标准化步骤...