2017-03-18 7 views
0

次のAJAX呼び出しを使用して、同じGithubリポジトリ内の別のディレクトリの日本語文字を含むテキストファイルを取得しています。GithubからAJAX経由で取得した日本語テキストファイルが文字化けしています

$.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

ねえ、あなたは偶然データセットに私たちをリンクすることができ、URLがあります死んだリンク。 – Neil

+0

@nfnneilデータセットへのリンクを追加しました。それは日本語の単語リストのテキストファイルです。 – user341554

+0

それは私のために完全に表示されましたが、自分のサーバーを使用しましたが、http://neil.computer/stack/japanese.txt(pastebinはクロスオリジンを許可していません)。それを使って試してみましょう。 – Neil

答えて

2

あなたのペーストビンのリンクは使用されていません。
ほとんどの場合、あなたの.txtファイルは多くの日本の文字セットエンコードの1つとしてエンコードされていますが、ページのエンコードはutf-8として設定されている可能性があります。その後、

2種類の溶液:

  • 最も簡単には、UTF-8としてあなたのtxtファイルを再エンコード。

  • できない場合は、ファイルをBlobとしてフェッチし、FileReaderと、readAsText(blob, encoding)の2つ目のパラメータによってテキストとして読み取ることができます。

(例を、以下では、私はISO-2022-JPとtxtファイルをエンコードしました。)

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>

+0

ファイルのエンコーディングをチェックする方法はありますか?私はWindowsのメモ帳に "Unicode"として保存したと確信しています。違いがありますか?はいの場合、私のオリジナルのDropboxのリンクは正常に動作しましたが、Githubのrawファイルは動作しませんでしたか? – user341554

+0

再エンコードされたファイルでもう一度試してみました。私は明らかにUnicodeとUTF-8は結局同じものではないでしょう!これらの2つのオプションの違いは何だったのだろうといつも思った... – user341554

+0

@ user351554ああ、Windowsとエンコーディング... [この回答](http://stackoverflow.com/questions/13894898/unicode-file-in-notepad)によると、ノートパッドの* unicode *はutf-16 little endianです。ファイルのエンコーディングをチェックする方法はありません。私たちができることは、(例えば、未知の文字や文字の範囲を調べることによって)推測することです。しかし、日本語は、検出する最悪の言語の1つであり、それを行うための単一の防弾方法はありません。 – Kaiido

関連する問題