当前位置: 首页 > 知识库问答 >
问题:

当字符串包含unicode字符时,无法始终成功使用String.startsWith()

余靖
2023-03-14

所以我有一个概念验证共轭实践应用程序,我正在用Vue.js构建。其中一个关键因素是,当您键入共轭的答案时,它会将输入文本与String.startswih()进行比较。这非常好,直到字符串具有unicode字符。似乎您输入的unicode字符几乎总是与数据库中的字符不同。在这个节点CLI示例中,您实际上可以直观地看到,我在“ț”字符中键入的版本与数据库“ţ”中的版本完全不同。

下面是键入的输入的输出,它的值和unicode值与比较:

input: anunț // anun\u21B
comparison: anunţ // anun\u163

我尝试过. noralize()之类的东西,但它似乎不会影响输入的字符串或比较字符串。

> var input = 'anunț'
> var comparison = 'anunţ'
> input === comparison
false
> input.normalize() === comparison
false
> input.normalize() === comparison.normalize()
false
> input === comparison.normalize()
false
/// etc etc with NFC, NFD, NFKC, NFKD forms
> input.normalize()
'anunț'
> comparison.normalize()
'anunţ'

// i've also tried .normalize() with the string decoded into unicode

我尝试过转换为unicode并手动替换一组字符串,但它只能做到这一步,并带来了它自己的一系列问题,包括有时当您键入答案时,它会开始出现问题,直到输入整个字符串。

最后,我开始尝试正则表达式比较,但我认为这也可能是另一个兔子洞干扰。

在没有上述任何尝试的情况下,将其归结为最基本的逻辑,这是我尝试做的关键,对于上下文而言:

if (this.conjugation.startsWith(this.input)) {
    this.status = "correct";
} else {
    this.status = "incorrect";
}

if (conjugation === val) {
    // okay, we are done
}

有什么办法可以解决这个问题吗?我目前正在用罗马尼亚语动词对此进行测试,因此字符似乎在以下unicode范围内:

-\u007F-\u024F阿胶-\u017F

共有2个答案

强宾白
2023-03-14

这两个角色非常相似,但它们是截然不同的。一个在t和下逗号标记之间有空格,就像符号的一部分一样。

沙星波
2023-03-14

您可以使用< code>Intl。Collator构造一个只关心某些差异的Collator:

var word1 = "anunț"; // anun\u21B
var word2 = "anunţ"; // anun\u163

var collator = new Intl.Collator("ro", { sensitivity: "base" });

console.log(word1 === word2); // the words are not equal
console.log(collator.compare(word1, word2) == 0); // ... but they are "equal enough"
 类似资料:
  • 问题内容: 我从HTML页面中将一个字符串输入到Java HTTPServlet中。根据我的要求,我得到了显示汉字的ASCII码: “&#21487;&#20197;&#21578;&#35785;&#25105;” (无空格) 如何将该字符串转换为Unicode? HTML代码: Java代码: 如果我打印问题[0],则会得到以下值:“&#21487;&#20197;&#21578;&#3578

  • 问题内容: 如何将Unicode字符串(包含额外的字符,如£$等)转换为Python字符串? 问题答案:

  • 题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里? 为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B) 比如,如果是下面两个字符串: String 1:ABCD String 2:BAD 答案是true,即Stri

  • 我在Mako模板中有以下代码: 这将url转义应用于表示公司的对象的名称字符串。然后在URL中使用得到的转义字符串。Mako文档说明使用提供url编码。 在服务器上,我将公司名称部分接收到参数中: 然后使用investment_name作为键返回到模板中提取它的字典中。 这对于公司名称中的所有标准大小写(如空格、斜杠和单引号)都很适用。但是,如果公司名称包含ascii字符集之外的unicode字符

  • 两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c]) dataframe的列名是“src”和“dst”。 我如何处理这个问题?