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

时间:2015-06-01 14:09:55

标签: javascript unicode keyboard-layout

我必须将文本发送到打印服务,打印服务只接受某些类型的特殊字符,即ï。我的客户端以某种方式输入文本,使得字母看起来相同,但具有不同的底层unicode符号,因此打印服务无法正确处理。例如:

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

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

2 个答案:

答案 0 :(得分:5)

正如评论中正确指出的那样,有两种方式(或#34;规范化形式")来表示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"

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

答案 1 :(得分:4)

\u00EF是ï或带有分音符的拉丁文小写字母空格字符)

\u0069 \u0308拉丁文小写字母,其后是结合分音符

Normalization需要将第二个双字符序列转换为第一个。在发送到打印服务之前,您需要找到一些实用程序来执行此规范化。

有关选项,请参阅JavaScript Unicode normalization