通过AJAX从Github检索的日文文本文件是乱码

时间:2017-03-18 00:34:40

标签: jquery ajax github character-encoding

我正在使用以下AJAX调用从同一个Github仓库中的另一个目录中获取包含日文字符的文本文件。

$.ajax({
    type: "GET",
    url: "https://raw.githubusercontent.com/mystuff/japaneseProject/master/data/jp.txt",
    contentType: 'text/plain; charset=utf-8',
    dataType: "text",
    cache: false, 
    success: function(data) {
        console.log(data);
    }
});

然而,console.log(data)的输出只是垃圾:

enter image description here

编码可能会发生一些事情,但我不知道是什么。最初这个URL是一个直接的Dropbox链接,它工作得很好,但是由于Dropbox停止了它的公共文件夹,它不再用了。

如果我尝试其他托管服务,例如Google云端硬盘,我要么遇到CORS错误,要么输出相同的垃圾。

Here's an example of the text file

1 个答案:

答案 0 :(得分:2)

您的pastebin链接没用 问题很可能是您的.txt文件已被编码为许多日语字符集编码之一,但您的页面编码设置为utf-8。

然后有两个解决方案:

  • 最简单,将您的txt文件重新编码为utf-8。

  • 如果你不能,你可以将你的文件作为Blob获取,然后通过FileReaderreadAsText(blob, encoding)的第二个参数将其作为文本阅读。

(在下面的示例中,我将txt文件编码为ISO-2022-JP。)

fetch('https://dl.dropboxusercontent.com/s/ikr7tk47ygt2mfe/test-ISO2022-JP.txt?dl=0')
  .then(resp => resp.text())
  .then(text => raw.innerHTML = text);
 
fetch('https://dl.dropboxusercontent.com/s/ikr7tk47ygt2mfe/test-ISO2022-JP.txt?dl=0')
  .then(resp => resp.blob())
  .then(blob => {
    let fr = new FileReader();
    fr.onload = e => fileRead.innerHTML = fr.result;
    fr.readAsText(blob, 'ISO-2022-JP');
    });
table {
  margin-top: 12px;
  border-collapse: collapse;
}

td,
th {
  border: 1px solid #000;
  padding: 2px 6px;
   vertical-align: top;
}

tr {
  border: 0;
  margin: 0;
}
<table>
<tr>
<th>Raw response as text</th>
<th>From FileReader + encoding</th>
</tr>
<tr>
<td><pre id="raw"></pre></td>
<td><pre id="fileRead"></pre></td>
</tr>
</table>