【发布时间】:2019-11-10 04:17:53
【问题描述】:
我遇到了文本处理问题。
(A)'kháchhàng'
(B)'kháchhàng'
A 和 B 相同,但它们在代码中不相等。它们看起来一样,对吧?
按 F12 > Console > paste 'khách hàng' === 'khách hàng' > Enter
可以看到我的问题我可以将 A 和 B 转换为相同的编码吗?怎么做?
谢谢!
【问题讨论】:
标签: encoding character-encoding
我遇到了文本处理问题。
(A)'kháchhàng'
(B)'kháchhàng'
A 和 B 相同,但它们在代码中不相等。它们看起来一样,对吧?
按 F12 > Console > paste 'khách hàng' === 'khách hàng' > Enter
可以看到我的问题我可以将 A 和 B 转换为相同的编码吗?怎么做?
谢谢!
【问题讨论】:
标签: encoding character-encoding
是的,两个字符串 (A) 和 (B) 使用不同的规范化形式:NFC (Canonical Composition) for (A),NFD (Canonical Decomposition) for (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 中,这可以通过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);似乎在“幕后”执行了一个意想不到的标准化步骤......
【讨论】: