javascript - 如何使用 Javascript 比较 "M"和 "M"(UTF 格式)?

标签 javascript unicode utf

我遇到一种情况,如果网格包含某个子字符串,我必须搜索该网格。我有一个搜索栏,用户可以在其中输入字符串。问题是网格包含日语文本和 Unicode 字符的混合, 例如: MAGシンチ注 333MBq 。

如何比较从键盘输入的字母“M”和上例中的字母“M”的内容相等性?我正在尝试使用纯 Javascript 而不是 Jquery 或其他库来做到这一点。我必须在 Internet Explorer 中执行此操作。

谢谢

最佳答案

正如 @Rhymoid 对这个问题的富有洞察力的评论中提到的,现代 JavaScript (ES2015) 包括对 Unicode 规范化的支持。规范化的一种模式是将“兼容”的字母形式从较高的代码页映射到较低代码页中的最基本的代表(总而言之,它有点涉及)。 .normalize("NFKD") 方法会将日语代码页中的“M”映射到对应的拉丁语代码页。因此

"MAGシンチ注 333MBq".normalize("NFKD")

会给

"MAGシンチ注 333MBq"

截至 2016 年底,IE 不支持 .normalize()

在较低级别,ES2015 还具有 .codePointAt() (在另一个好的答案中提到),它类似于下面描述的较旧的 .charCodeAt() 但它还可以理解 UTF-16 对。但是,Safari 不支持 .codePointAt()(同样是在 2016 年末)。

以下是旧版浏览器的原始答案

您可以使用.charCodeAt()方法检查字符串中的UTF-16字符代码。

"M".charCodeAt(0)

是 77,而

"M".charCodeAt(0)

是 65325。

这种方法很复杂,因为对于某些 Unicode 字符,UTF-16 表示涉及 JavaScript 字符串中的两个单独的字符位置。该语言不提供处理该问题的 native 支持,因此您必须自己完成。 55926 和 57343(D800 和 DFFF 十六进制)之间的字符代码表示两个字符对的开始。 The UTF-16 Wikipedia page has more information ,还有各种其他来源。

关于javascript - 如何使用 Javascript 比较 "M"和 "M"(UTF 格式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203347/

相关文章:

python - 如何实现串行设备使用的自定义代码页,以便我可以在 Python 中将文本转换为该代码页?

javascript - Shiny htmlOutput 中的 for 循环未按顺序执行

Javascript 原型(prototype)需要 .prototype。为什么?

javascript - 更新 ng-repeat 内呈现的指令中的 Controller $scope 属性

c - stb_truetype.h 处理unicode

winforms - 文本框上的化学符号支持

python - 在 Python 中加载 JSON 作为 header 字符集

Python:模式 'wt' 中的 bz2 和 lzma 不编写 BOM(而 gzip 编写)。为什么?

c++ - UTF 8 编码算法与 UTF 16 算法

javascript - Iframe 输入未捕获 TypeError : Cannot set property 'value' of null