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

Encoding 相同的文本但不相等,如何转换为相同的编码?,encoding,character-encoding,Encoding,Character Encoding,我的文本处理有问题 (A) “khách háng” (B) “khách hàng” A和B是一样的,但它们在代码上不相等。他们看起来一样,对吗 您可以通过按F12>Console>paste'khaách háng'==='khách hàng'>输入来查看我的问题 我可以把A和B转换成相同的编码吗?怎么做 谢谢 是的,两个字符串(A)和(B)使用了不同的规范化形式:NFC(规范组合)用于(A),NFD(规范分解)用于(B) (A) khách háng:U+006B U+0068

我的文本处理有问题

(A) “khách háng”

(B) “khách hàng”

A和B是一样的,但它们在代码上不相等。他们看起来一样,对吗

您可以通过按F12>Console>paste'khaách háng'==='khách hàng'>输入来查看我的问题

我可以把A和B转换成相同的编码吗?怎么做

谢谢

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

(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中,这可以通过以下方法实现:

警告:根据您的web浏览器,特别是在Firefox或Safari中,复制或粘贴字符串(B)可能会导致字符串(A);似乎在“幕后”执行了意外的规范化步骤…

可能的重复
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