无法读取带有 d3.dsv 的 "latin1" 编码文件的重音

Unable to read accents of "latin1" encoded file with d3.dsv

我有一个 csv 文件(用分号分隔,所以我使用 d3.dsv 来阅读它)

d3.dsv(";", "Project.csv", function(d) {
    console.log(d)
});

但是我在重音所在的地方得到了“�”。

我知道文件是“latin_1”编码的,所以我尝试了这个:

dsvReader = d3.dsv(";", "iso-8859-1");
dsvReader("Project.csv", function(d) {
    console.log(d)
});

但我收到以下错误:

> net::ERR_FILE_NOT_FOUND
> Uncaught (in promise) TypeError: Failed to fetch

您的第一个片段:d3-fetch 函数 d3.dsvfetch 的结果上使用 response.text(),它只处理 UTF-8。

您的第二个片段:您尝试获取名为 iso-8859-1 的文件,该文件可能不存在。 d3.dsv 中没有接受编码的参数。

一种解决方案是确保服务器具有 UTF-8 文件,而不是 Latin-1 文件。这是最简单的解决方案:到 2022 年,不使用 Unicode 的合法理由很少。

另一种是自己使用fetch,或者在现在正确的数据上使用d3.buffer or d3.blob, then convert the response to UTF-8 yourself, as described in using TextDecoder (on buffer) or .readAsText (on blob), and finally use d3.dsvFormat(";").parse