2017-03-10 5 views
0

私はこれでFirefoxのV52でUTF-16ファイルの内容を読み取るしようとしているのJavascript parseFloatははUTF-16文字列で動作していない:Firefoxの52:

$.ajax({ 
    type: "GET", 
    url: "downloads/dg_mare_piwik_social.csv", 
    dataType: "text", 
    success: function(data) { 

     // Split the lines 

     var lines = data.split('\n'); 
     for (var i = 1, len = lines.length; i < len; ++i) { 
      var items = lines[i].split(','); 
      console.log(items[0], Number.parseFloat(items[1])); 
     } 
}); 

問題は、コンソールIでparseFloat(items[1])からNaNを取得します。 これはFirefoxでのみ発生し、他のすべてのブラウザはその番号を取得します。

どうすれば動作させることができますか? UTF-16文字列から数値を取得するにはどうすればよいですか?

+3

'items [1]'の生の価値とは何ですか? – Liam

+0

問題はJavaScriptレイヤーではなく、JavaScriptに到達する前です。ほとんどの場合、ファイルは一方向(UTF-16など)でエンコードされていますが、サーバーレスポンスは別の方法でエンコードされていると言います(UTF-8など)。 –

+0

JavaScript文字列を扱うときは、[それは常にUTF-16です](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-terms- and-definitions-string-value)(ただし、無効なサロゲートペアを使用することができます)、どのように開始されたかにかかわらずです。 –

答えて

1

敬称T.J.私が問題の原因を特定するのを助けたCrowder。これに変更すると、問題が解決しました。

$.ajax({ 
    type: "GET", 
    url: "downloads/dg_mare_piwik_social.csv", 
    dataType: "text", 
    beforeSend: function (data) { data.overrideMimeType('text/plain; charset=UTF-16'); }, 
    success: function(data) { 

     // Split the lines 

     var lines = data.split('\n'); 
     for (var i = 1, len = lines.length; i < len; ++i) { 
      var items = lines[i].split(','); 
      console.log(items[0], Number.parseFloat(items[1])); 
     } 
}); 

beforesendにoverrideMimeTypeを追加しています。

関連する問題