上周,我们的一个应用程序开始显示一个奇怪的bug:€
标志显示为€
标志。在深入研究之后,我注意到,我们显示的每一个价格金额都会经过格式化函数。因此,检查devtools中的源代码揭示了为什么我们会看到一个不同的字符:
return "€ " + x1 + ",-"
因此,看起来该脚本使用了与UTF-8不同的编码。源代码清楚地显示了该行上的欧元符号,但Chrome devtools中的源代码选项卡显示不同。
我在多个浏览器上进行了测试,Firefox、IE 11和Edge都正确地显示了欧元符号。歌剧没有,所以这看起来像是Webkit的问题?
如果我在Chrome (ctrl+shift+R)中完全刷新页面,一切看起来都正常,所有欧元符号都正确呈现。
This question声明之所以显示€
字符,是因为使用了ISO8859-1进行呈现(它没有欧元符号)。Webkit有没有可能只选择一种不同于UTF-8的编码来解析JavaScript文件?
发布于 2018-06-28 09:34:50
Giacomo Catenazzi上面的评论给我指明了正确的方向。应用程序托管在Java后端上,因此有一个login.html
和app.html
页面,Java后端充当index
。我知道app.html
在<head>
中有一个<meta charset="utf-8">
标签,但这条评论激发了我检查login.html
的灵感,我注意到它遗漏了元标签。
login.html
加载应用程序脚本文件。因此,当用户登录时,Chrome会在没有特定编码的情况下获取登录页面上的脚本文件,当用户转到应用程序页面时,会从缓存中提供(不正确编码的)脚本文件。这解释了为什么刷新修复了一切(脚本从服务器重新获取),也解释了为什么这种情况“突然”发生。最近更改了登录页面以加载脚本文件。
确保每个获取脚本的超文本标记语言文件的<head>
中都有一个<meta charset="utf-8">
。
https://stackoverflow.com/questions/51065656
复制相似问题