29

我刚刚从使用 d3.v3 缩小版本的本地副本切换到开发版本。使用缩小版本时它工作正常,但使用我的本地副本http://d3js.org/d3.v3.js给了我标题中的错误,引用这一行:

var € = Math.PI, µ = 1e-6, d3_radians = € / 180, d3_degrees = 180 / €;

当我包含托管文件时,它工作正常。

4

2 回答 2

65

问题是您使用 ISO-8859-1 字符编码(通常是浏览器默认值)为 D3 提供服务,而 D3 必须使用 UTF-8 编码提供服务。通常发生这种情况是因为您在加载 HTML 页面的顶部缺少一个元标记:

<!DOCTYPE html>
<meta charset="utf-8">

需要元指定字符集,因为d3js.orgGitHub Pages提供,并且未在 Content-Type 响应标头中指定字符集。因此,字符集是从加载的 HTML 文档中推断出来的。

如果您愿意,可以在脚本标签上指定一个字符集属性。确保在测试之前清除浏览器缓存,因为缓存的副本将保留最初访问时的字符编码:

<script src="http://d3js.org/d3.v3.js" charset="utf-8"></script> 

缩小版本不会发生该错误,因为变量名称已替换为 ASCII 等效项。(我不记得如果格式字符串中的 UTF-8 字符同样被转义序列替换,但我仍然建议在所有情况下将 D3 用作 UTF-8。)

如果您通过在浏览器中查看源代码然后使用复制粘贴来下载 D3,也可能会出现编码问题,这就是我建议下载d3.v3.zip的原因。

于 2013-01-13T06:33:10.867 回答
3

这绝对是一个编码问题,请尝试关注这一点。

使用 Chrome 打开您发布的链接(http://d3js.org/d3.v3.js),我也看到了双字节字符:

 var π = Math.PI, ε = 1e-6, d3_radians = π / 180, d3_degrees = 180 / π;

如果您几乎不使用“将页面另存为...”来保存文件并使用 Sublime Text (http://www.sublimetext.com/)之类的编辑器打开它,它可以正常工作并显示:

var π = Math.PI, ε = 1e-6, d3_radians = π / 180, d3_degrees = 180 / π;

我尝试将此下载的文件与我的项目一起使用,没关系。

于 2013-01-08T15:04:04.167 回答