D3.js:"Uncaught SyntaxError: Unexpected token ILLEGAL"的意思是什么?

77

我刚刚从d3js.org(zip文件的链接)下载了D3.js,解压缩后,在以下HTML页面中引用它:

<html>
<head>
<title>D3 Sandbox</title>
<style>
</head>
<body>
<script src="/d3.v3.js"></script>
</body>
</html>

但是当我加载这个页面时,我的控制台(在Chrome中)会给出这个错误:
Uncaught SyntaxError: Unexpected token ILLEGAL: line 2

它不喜欢文件开头的pi和e符号。嗯...我该怎么办?我正在使用Python的SimpleHTTPServer提供该文件。

更新:是的,我知道我可以链接到CDN版本,但我更愿意本地提供该文件。


我的问题是SimpleHTTPServer默认不支持UTF-8。可以参考以下链接:https://dev59.com/u2Up5IYBdhLWcg3wbXFf - lewurm
5个回答

136

尝试在HTML主文档上指定UTF-8字符集:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

D3包含UTF-8符号(如π),对于非UTF8文档无效。


5
"<meta charset='UTF8'>" 对我很有帮助,但不知道为什么较长的版本没用。谢谢。" - Nitsan Baleli
5
你能评论一下为什么这是必要的吗? - BBischof
3
BBischof说:D3包含UTF-8符号(例如π),这些符号在非UTF-8文档中是无效的。 - Laurent Jégou
1
如果用户在Chrome中将其“查看->编码”设置关闭为“自动检测”,则此方法无效。使用uglify并带有“--ascii-only”选项运行它会更可靠。 - Nathan Bubna
我在WebFocus中遇到了同样的问题,但它没有为我纠正错误。我不得不使用d3.min.js代替。 - user1853517
1
你需要使用UTF8,因为D3会用到一些特殊字符,比如π(圆周率): https://github.com/mbostock/d3/issues/1195 - Nicolaï Van Lennepkade

9

6

添加 'charset="utf-8"'

<script src="/d3.v3.js" charset="utf-8"></script>

1
虽然这很无聊,但如果用户在 Chrome 的 View->Encoding 设置中关闭了自动检测,这并没有帮助。使用 uglify 和 --ascii-only 选项更加可靠。 - Nathan Bubna

5

我尝试在文档和脚本标签中设置字符集,但Chrome似乎不在意。不确定我是否做错了什么。

我成功地通过使用uglify并选择--ascii-only选项来解决了这个问题。

更新:事实证明,我的Chrome浏览器的查看->编码设置不是自动检测,而是某种西方编码。不确定原因,但更改后解决了问题。令人荒谬的是,这个设置会压过脚本标签上直接设置的字符集属性。考虑到用户可能处于同样的情况而无法解决问题,我仍将使用uglify以确保成功。


遇到了相同的问题。将编码设置更改为自动检测即可解决问题。 - Andrew Staroscik

0

检查您的字符串连接是否在所有连接点之间都有加号,如果没有,则会生成此错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接