2011-03-25 47 views
6

我的网站在localhost上运行正常,我的JavaScript正在加载并正常工作。但是当我部署该网站时,该脚本无法正常工作。当我用鼠标右键单击该页面,并说查看源代码,然后查看链接的脚本文件,它有一些奇怪的字符在文件(函数($){Javascript中的奇怪字符导致它无法加载

在本地主机上,我的脚本文件的开始这样(function($){

开始是什么原因造成这些字符被加在我的JavaScript文件?

+2

我不知道这些字符是否可能是Unicode领导者? – Pointy 2011-03-25 15:43:50

+0

@Pointy:他们是。这是UTF-8 BOM。 – Martijn 2011-03-25 16:14:02

+0

你说你的脚本不工作。这不是很具体。你遇到了什么错误?你预期会发生什么,但没有? Javascript控制台,Firebug,Javascript调试器和这些工具报告什么? – Martijn 2011-03-25 16:17:45

回答

6

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

在visual studio中:

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

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

+0

不确定你的意思?我正在使用Visual Studio,当然不应该有用vs保存文件的问题?无论如何,我在记事本中打开文件并保存,文件中没有任何文件,然后使用filezilla重新将其复制。还是同样的问题... – greg 2011-03-25 15:48:31

+0

@greg,我编辑了答案。 – 2011-03-25 15:54:13

+0

我怀疑这些字符是脚本失败的原因。大多数浏览器在看到它时都知道如何处理UTF-8 BOM。另外,OP表示在localhost上运行时它们不可见,这表明它只是记事本不能解释它们。埃尔戈,剧本问题在别处。 – Martijn 2011-03-25 16:16:35

1

我觉得Briedis是对这个问题,但我建议不同的解决方案。

当你提供服务的文件,它是被送达Content-type

Content-Type: text/javascript;charset=US-ASCII 

如果是这样,请务必使用UTF-8字符集代替它。

+0

提到如何做到这一点非常好。 – 2015-01-04 03:06:08

+0

@NikanaReklawyks,不知道你的服务器,我不能。 – 2015-01-05 02:22:09

1

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

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

就我而言,我在IIS中有一个Site,它是一个ASP.NET应用程序,它下面的应用程序也是一个ASP.NET应用程序。这已经导致了继承web.configs的一些复杂性,解决方法是放置一个标记,否定从那时起的继承。

然后我发现我的孩子网站中的所有.js都是为每个文件的前3个字节的那个愚蠢的UTF-8编码符号抛出一个错误。我有理由相信,它是由我的两层web.configs解决方案中的一些混淆因素造成的。

但是,我的解决方案是将.js文件转换回纯ASCII,因为这正是IIS发送出的内容和客户端期望的。对于我来说,我有一个build.bat,用于复制所有网页文件,删除任何源代码管理和项目文件,并将它们全部放入最终生成目录中,以便复制到测试或生产服务器。我对该脚本进行了修改,以将所有.js文件转换为ASCII格式。

它使用DOS批处理的组合(因为这是我开始)和PowerShell(因为这是我发现在不增加更多的实用程序转换的唯一途径):

集DIRTOCONVERT =任何路径你想要它将所有文件转换为 ECHO删除UTF-8 BOM字符ï»? (* .js)do( )powershell -command“gc -en utf8 \”%% g \“| out-file -en ascii。\ tmp.txt文件前面的文件 “ 移动/ Y \ tmp.txt ”%% G“ )

注意,有几个人在线(甚至在StackOverflow上)有想法尝试: BADFILE.TXT型> goodfile.txt

但仍然承载UTF-8编码。显然,它并不习惯这样做。