Javascript Unicode:相同的字母但不同的unicode

use*_*936 4 javascript unicode keyboard-layout

我必须将文本发送到printservice,该服务仅接受某些类型的特殊字符,即ï。我的客户以某种方式输入文本,使得字母看起来相同,但是具有不同的基础unicode符号,因此printservice无法正确处理它们。例:

Mine: ï (unicode \u00EF)
Theirs: i? (unicode \u0069\u0308), copy pasting the 2 symbols in chrome bar for example, will show that it actually looks the same in textarea's)
Run Code Online (Sandbox Code Playgroud)

如何将所有特殊字符从“他们的样式”转换为“我的样式”(Windows上的荷兰语键盘布局)?我想这与操作系统或键盘布局有关,但是我找不到列出差异的列表或与此问题相关的任何东西。有人有建议如何进行吗?

geo*_*org 5

正如注释中正确指出的那样,有两种方法(或“规范化形式”)来表示unicode中的重音字符:

  • 带有专用符号(\u00EF == ï
  • 由基本字母+重音组成(例如i + ¨ == i + \u0308 == ï

ES6添加了一个专用功能,该功能可在规范化形式之间转换字符串:String.normalize

// convert one-char ("composed") to multiple-chars ("decomposed") form:
escape("\u00EF".normalize("NFD"))  
> "i%u0308"

// convert decomposed form to composed:
escape("i\u0308".normalize("NFC"))  
> "%EF"
Run Code Online (Sandbox Code Playgroud)

如果您的系统尚不支持normalize,请四处寻找垫片。