d3.js 无法使用d3.dsv读取“latin1”编码文件的重音符号

qoefvg9y  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个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
cetgtptt

cetgtptt1#

您的第一个片段:d3-fetch函数d3.dsvfetch的结果使用response.text(),它只处理UTF-8。
您的第二个片段:您试图获取名为iso-8859-1的文件,但该文件可能不存在。d3.dsv中没有接受编码的参数。
一个解决方案是确保服务器上有UTF-8文件,而不是Latin-1文件。这是最简单的解决方案:在2022年,不使用Unicode的正当理由已经很少了。
另一种方法是自己使用fetch,或者使用d3.bufferd3.blob,然后自己将响应转换为UTF-8,如Fetching non-utf8 data with XMLHttpRequest中所述,使用TextDecoder(在缓冲区上)或.readAsText(在blob上),最后对现在正确的数据使用d3.dsvFormat(";").parse

相关问题