如何将unicode字符串与Javascript中输入的值进行比较

如何将unicode字符串与Javascript中输入的值进行比较,javascript,string,unicode,comparison,Javascript,String,Unicode,Comparison,我对如何在javascript中比较unicode字符串感到非常困惑,甚至不知道如何搜索这个问题 有人知道为什么html输入的字符串与unicode字符串不同,即使它们在视觉上是相同的 s1='\u00c3\u00a4示例' s2=‘菠萝’ s3=document.querySelector(“#myword”).value//pple //s1.value.normalize()==s2.normalize()将为true //s1.value.normalize()==s3.normaliz

我对如何在javascript中比较unicode字符串感到非常困惑,甚至不知道如何搜索这个问题

有人知道为什么html输入的字符串与unicode字符串不同,即使它们在视觉上是相同的

s1='\u00c3\u00a4示例'
s2=‘菠萝’
s3=document.querySelector(“#myword”).value//pple
//s1.value.normalize()==s2.normalize()将为true
//s1.value.normalize()==s3.normalize()是否为false?为什么?
//s3.value.normalize()==s2。normalize()将为false吗?为什么?

JavaScript存在Unicode问题

JavaScript中的字符串是代码单元序列。可以合理地预期,字符串比较涉及对匹配的代码单元进行求值

const firstStr = 'hello';
const secondStr = '\u0068ell\u006F';
console.log(firstStr === secondStr); // => true
firstStr和secondStr字符串具有相同的代码单元序列。他们是平等的

假设要比较两个呈现的字符串,它们看起来相同,但包含不同的代码单元序列。然后可能会出现意外结果,因为在比较中,外观相同的字符串不相等:

const str1 = 'ça va bien';
const str2 = 'c\u0327a va bien';
console.log(str1);          // => 'ça va bien'
console.log(str2);          // => 'ça va bien'
console.log(str1 === str2); // => false
呈现时,str1和str2看起来相同,但具有不同的代码单元。 之所以会发生这种情况,是因为可以用两种方式构造çgrapheme:

Using U+00E7 LATIN SMALL LETTER C WITH CEDILLA
Or using a combining character sequence: U+0063 LATIN SMALL LETTER C plus the combining mark U+0327 COMBINING CEDILLA.
参考链接:


非常感谢您的及时回复。我理解字符串在视觉上是一样的时候也可能是不同的。而在我的情况下,我需要在if语句中实现。当我比较它们时,我确实正常化了。我假设它们在标准化后是一样的。我遗漏了什么吗?请在这里检查这些示例。很抱歉,我无法从该示例中找到任何新信息。这似乎是规范化函数的一个例子。如果我在代码中分配了两个字符串变量,它就起作用了,但是如果我试图规范化输入文本框中的字符串,它就不起作用了。