【问题标题】:Same text but were not equal, how to convert to the same encoding?相同的文本但不相等,如何转换为相同的编码?
【发布时间】: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


【解决方案1】:

是的,两个字符串 (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);似乎在“幕后”执行了一个意想不到的标准化步骤......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多