Javascript中的奇怪字符导致它无法加载

时间:2011-03-25 15:41:50

标签: javascript encoding

我的网站在localhost上工作正常,我的javascript正在加载并正常工作。但是当我部署网站时,脚本无法运行。当我右键单击页面并说出查看源然后查看链接的脚本文件时,它在文件的开头有一些奇怪的字符(函数($){

在localhost上,我的脚本文件以(function($){

开头

是什么导致这些字符被添加到我的javascript文件中?

3 个答案:

答案 0 :(得分:6)

您必须以“UTF-8无BOM”编码重新保存文件。 您可以使用Notepad ++或其他编辑器。

在视觉工作室:

  

默认情况下,Visual Studio使用带有BOM的UTF编码;但是,如果您愿意,可以将其保存为其他编码。当您转到“另存为”对话框时,可以展开“保存”按钮以查看“使用编码保存”选项。这将提示您输入不同的编码,我认为其中一个Unicode选项会遗漏BOM(列表中的某个位置是UTF-8,没有签名)。

来源:http://forums.silverlight.net/forums/t/144306.aspx

答案 1 :(得分:1)

我认为Briedis对这个问题是正确的,但我建议采用不同的解决方案。

当您提供该文件时,它是否与Content-type类似

一起提供
Content-Type: text/javascript;charset=US-ASCII

如果是这样,请确保使用UTF-8字符集来提供服务。

答案 2 :(得分:1)

我刚刚遇到同样的问题,并找到了解决办法。

作为Martjin问题的答案,问题是当客户端期望纯ASCII时,这些URF-8 BOM字符使javascript无效。所以它会说char 1,line 1或者其他一些错误,基本上就是在文件的开头,因为它使得代码文件看起来像是脚本的前几个字节中的拼写错误。

在我的情况下,我在IIS中有一个ASP.NET应用程序站点,下面有一个应用程序,它也是一个ASP.NET应用程序。这导致了继承web.configs的一些复杂问题,解决方案是放置一个标记,否定继承从那一点开始。

然后我发现子站点中的所有.js都为这个愚蠢的UTF-8编码符号抛出了一个错误,该符号是每个文件的前3个字节。我有理由相信,这是因为我的2层web.configs解决方案中的httphandlers存在一些混淆。

我的解决方案是将.js文件转换回纯ASCII,因为IIS正在发送并且客户端期待。对我来说,我有一个build.bat复制所有的Web文件,删除任何源代码控制和项目文件,并将它们全部放在最终的构建目录中,以便复制到测试或生产服务器。我对该脚本进行了修改,以便将所有.js文件转换为ASCII格式。

它使用DOS批处理(因为那是我开始的地方)和PowerShell的组合(因为这是我发现转换的唯一方法,而不添加更多的实用程序):

设置DIRTOCONVERT =您希望它转换所有文件的路径 ECHO删除UTF-8 BOM字符ï»?从文件前面 for / r%DIRTOCONVERT %%% g in(* .js)do(     powershell -command“gc -en utf8 \”%% g \“| Out-File -en ascii。\ tmp.txt”     move / y。\ tmp.txt“%% g” )

注意,一些在线人员(即使在StackOverflow中)有想法尝试: type badfile.txt> goodfile.txt

但仍然继续使用UTF-8编码。显然,它不习惯这样做。