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
==在以下情况下,JavaScript相等运算符似乎失败.在所有情况下都是程序员错误.不是JavaScript中的错误.
这两个字符串不包含相同的数字和字符序列.
在一个字符串之前,之内或之后有空格或换行符.在两者上使用trim()运算符并仔细查看两个字符串.
惊喜类型转换.程序员正在比较不兼容的数据类型.
有unicode字符看起来与其他unicode字符相同,但实际上是不同的unicode字符.