比较unicode字符时,Javascript字符串比较失败

tou*_*her 12 javascript string unicode data-transfer unicode-normalization

我想在JavaScript中比较两个相同的字符串,但是相等运算符==返回false.一个字符串包含一个特殊字符(例如丹麦语å).

JavaScript代码:

var filenameFromJS = "Designhåndbog.pdf";
var filenameFromServer = "Designhåndbog.pdf";

print(filenameFromJS == filenameFromServer); // This prints false why?
Run Code Online (Sandbox Code Playgroud)

解决方案 对我来说有用的是unicode规范化,正如slevithan指出的那样.

我分叉了我原来的jsfiddle使用slevithan建议的规范化lib来制作一个版本.链接:http://jsfiddle.net/GWZ8j/1/.

sle*_*han 11

与其他一些人所说的不同,这与编码无关.相反,您的两个字符串使用不同的代码点来呈现相同的可视字符.

要正确解决这个问题,您需要在比较它们之前对两个字符串执行Unicode规范化.不幸的是,JavaScript没有内置此功能.这是一个可以为您执行规范化的JavaScript库:https://github.com/walling/unorm


Eri*_*ski 6

==在以下情况下,JavaScript相等运算符似乎失败.在所有情况下都是程序员错误.不是JavaScript中的错误.

  1. 这两个字符串不包含相同的数字和字符序列.

  2. 在一个字符串之前,之内或之后有空格或换行符.在两者上使用trim()运算符并仔细查看两个字符串.

  3. 惊喜类型转换.程序员正在比较不兼容的数据类型.

  4. 有unicode字符看起来与其他unicode字符相同,但实际上是不同的unicode字符.