Chrome最新版本中toLocaleTimeString()返回ASCII 226而非空格问题求助
Chrome 110+ 中 toLocaleTimeString() 空白字符异常问题
是的,已经有不少开发者遇到过这个问题。
Chrome 110及以上版本在使用toLocaleTimeString()格式化12小时制时间时,将秒数与AM/PM标记之间的普通空格(ASCII 32,U+0020)替换成了窄非断空格(Narrow No-Break Space,U+202F),对应的UTF-8编码就是你提到的226 128 175。Chrome团队做这个调整是为了让时间文本的排版更紧凑美观,符合现代UI的视觉规范,但这确实会导致依赖字符编码或空格分割的逻辑出现异常。
验证方法
你可以通过以下代码直接查看字符的编码值:
const formattedTime = new Date().toLocaleTimeString('en-US', { hour12: true }); // 取秒数和AM/PM之间的字符位置(假设格式为 hh:mm:ss AM/PM) const spaceCharCode = formattedTime.charCodeAt(formattedTime.length - 3); console.log(spaceCharCode); // Chrome 110+ 返回 8239(U+202F的十进制值),旧版本返回32
临时解决方案
如果你的业务逻辑依赖普通空格,可以通过正则替换统一处理:
const normalizedTime = formattedTime.replace(/\u202F/g, ' ');
目前ECMAScript的本地化API还没有提供直接控制这类空白字符的配置项,替换是最直接的兼容方式。
内容的提问来源于stack exchange,提问作者user1488803
相关产品推荐
相关产品推荐

