Javascript toLocaleTimeString()在最新版本的Chrome中返回ASCII 226而不是空格

bqujaahr  于 2023-02-10  发布在  Go
关注(0)|答案(2)|浏览(132)

我们使用Javascript函数toLocaleTimeString()来解析日期/时间。最新版本的Chrome突然在秒和AM/PM之间返回ASCII 226。Edge没有任何问题,旧版本的Chrome也没有。110+有这个问题,109或更早版本没有。
例如,如果返回的最后几个字符为:
00上午
其ASCII转换为:
四十八四十八二百二十六一百二十八一百七十五
226原来是32(空格)。
有人也看到这种行为吗?

ep6jt1vc

ep6jt1vc1#

这显然是由this V8 CL引起的
以下是此ChangeLog的摘要:
[intl]增强日期解析器以采用Unicode SPACE
这是为ICU 72登陆做准备所必需的。允许在日期字符串中使用U+202 F,toLocaleString(“en-US”)将使用ICU 72生成该字符串。
所以这是为了支持next version of ICU-72,我们可以假设其他浏览器也会这样做。

qlzsbp2j

qlzsbp2j2#

我认为这是不间断空格。Non-breaking space
由于它也发生在Edge110上,我认为它是从 chrome 衍生而来的。

const event = new Date('August 19, 1975 23:15:30 GMT+00:00');
const localTime = event.toLocaleTimeString('en-US');
console.log(localTime);
console.log(localTime.indexOf(" "))
console.log(localTime.indexOf("\u{202F}"))
for (let i = 0; i < localTime.length; i++){
  console.log(localTime.charCodeAt(i));
}

相关问题