【问题标题】:JavaScript string normalize() does not work in some cases - why?JavaScript 字符串 normalize() 在某些情况下不起作用 - 为什么?
【发布时间】:2021-11-20 19:13:38
【问题描述】:

在我的调试器中,我可以看到使用 unicode 字符检索对象。例如

{
    name: "(Other\uff09"
}

如果在调试器中使用 var myObj 引用此对象,我会看到

myObj.name.normalize()

返回

"(Other\uff09"

如果我改为使用

"(Other\uff09".normalize()

返回

"(Other)"

为什么?

【问题讨论】:

  • 您的 name 属性包含文字反斜杠,而不是 Unicode 转义序列。
  • 啊,开发工具/浏览器显示它们相同,但它们在封面下是不同的字符。这就说得通了。关于如何逃脱它们的任何想法?此值用于电子邮件地址。但是该模块将字符视为无效并删除此特定地址。我想停止这种行为,因为我们需要提供地址。

标签: javascript unicode normalize


【解决方案1】:

自发布此问题以来,我学到了一些东西。最初我认为\uff09 等同于)。不是,而是),又名Full Width Right Parenthesis。

这实质上意味着左括号和右括号不匹配。例如( 未被)关闭。这导致我正在使用的 NodeMailer AddressParser 模块出现解析问题。

为了使其正常化,我正在使用

JSON.parse(`"(Other\uff09"`).normalize("NFKC")

将字符串转换为(Other),而不是(Other)。

打破这个

JSON.parse(`"(Other\uff09"`)

在需要双引号的地方,产生(Other)。即,它将 unicode 转义字符转换为它们所代表的字符。

然后

.normalize("NFKC")

将其转换为(Other)。

这在这个示例中对我有用。我还需要看看它是否会扩大规模。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多