gpt4 book ai didi

Javascript toUpperCase 在 chrome 中搞砸了拉丁字符

转载 作者:搜寻专家 更新时间:2023-11-01 04:09:32 26 4
gpt4 key购买 nike

这是代码。你可以在 Chrome(F12) 中测试:

"µ".toUpperCase()

这会返回一个不可见的字符,应该是“µ”。它在 IE 中运行良好。但是为什么?

在 Chrome 中,返回 ""(非空字符串,不可见字符)
在 IE 中,返回 "µ"
在 Firefox 中,返回 "M"(不是字母 M)

最佳答案

正确的结果是“μ”U+039C 希腊大写字母 MU。它的字形与包含两者的任何普通字体中的拉丁字母“M”相同,但它当然仍然是一个不同的字符(在比较、转换等方面)。

根据ECMAScript标准(条款 15.5.4.18),toUpperCase 应根据 Unicode 工作字符数据库。其中,“µ”U+00B5 MICRO SIGN的大写映射为U+039C。这背后的原因是,在Unicode中,微符号被视为希腊字母mu的单独编码形式;正式地,兼容等同于 U+03BC GREEK SMALL LETTER MU 的兼容字符。 (“µ”和“μ”这两个字符实际上在字体中可能具有不同的字形,但这不会改变它们的形式属性。)

因此,在这种情况下,Firefox 是正确的,IE 和 Chrome 是错误的。 Chrome 返回的值是 U+009C,一个控制字符,没有任何意义,所以这显然是一个无意的错误,一个编码错误。 IE 行为可能是故意错误的,因为在实践中,微符号永远不应该大写。 (所以 Unicode 规则在这个问题上是荒谬的,但它仍然是规则,需要应用符合要求的实现。)

解决方案是包含微符号的文本不应大写。微符号旨在用于国际单位制 SI 的符号,并且这种符号通常不应大写。大写,例如,“µs”不仅会将微前缀更改为希腊语 M(看起来像兆前缀的符号),还会将秒更改为西门子。

关于Javascript toUpperCase 在 chrome 中搞砸了拉丁字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com