AjaxでSJISファイル読み込みすると文字化け

このQ&Aのポイント
  • Ajaxを利用し、SJISで作成されたCSVファイルを読み込みたいのですが文字化けしてしまい困っています。
  • 東京電力が公開しているSJISのCSVファイルの中身を表示したいのですが、Ajax単体で文字化けしてしまいます。
  • JavaScript側で何とか文字化けを解決する方法を教えてください。
回答を見る
  • ベストアンサー

AjaxでSJISファイル読み込みすると文字化け

Ajaxを利用し、SJISで作成されたCSVファイルを読み込みたいのですが文字化けしてしまい困っています。 最終的には、Windowsのサイドバーガジェットで、東京電力が公開しているSJISのCSVファイルの中身を表示したいのです。(それ以前にAjax単体で文字化けしてしまいます) 本来、CSVをUTF-8にしたり、サーバサイド(PHPなど)側で文字コード変換したりするのでしょうが、それができないため、JavaScript側で何とかしたいのですが、ご教授願います。 以下、サンプルソースです。 何故か、東京電力のCSVはダメで、東北電力のCSVは大丈夫です。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <html> <head> <script language="JavaScript"> function getCsv(uri){ var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlHttp.open("GET",uri); xmlHttp.onreadystatechange = function(){ if(xmlHttp.readyState==4 && xmlHttp.status==200){ document.getElementById("disp").innerHTML = xmlHttp.responseText; } } xmlHttp.send(null); } </script> </head> <body> <form> <select onchange="getCsv(this[this.selectedIndex].value);"> <option>↓選択してください <option value="http://www.tepco.co.jp/forecast/html/images/juyo-j.csv">東京電力 <option value="http://setsuden.tohoku-epco.co.jp/common/demand/juyo_tohoku.csv">東北電力 </select> </form> <div id="disp"></div> </body> </html>

noname#245677
noname#245677
  • AJAX
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.2

> 何故か、東京電力のCSVはダメで、東北電力のCSVは大丈夫です。 HTTPのレスポンスヘッダを確認してみたところ、 東京電力は Content-Type に charset の指定がありませんでした。 一方、東北電力は charset=shift_jis になっていました。 東京電力 Content-Type: text/plain 東北電力 Content-Type: text/plain; charset=shift_jis charset が明示されていないものだから、 実際は SJIS なのにブラウザが UTF-8 とみなして 文字化けしている状況ではないかと思います。 東京電力に意見・要望を送り、東北電力と同じに してもらうのはどうでしょうか。

noname#245677
質問者

お礼

回答ありがとうございます。 HTTPレスポンスヘッダを確認したところ、確かに東京電両側にcharsetの指定がありまぜんでした。 JavaScript側での回避が困難であるため、東京電力に意見を送ってみたいと思います。 アドバイスありがとございました。

noname#245677
質問者

補足

その後、東電に意見を送りましたが、現時点で音沙汰無し状態で、 更に、東北電力のデータも文字化けするようになってしみました。 CSV提供元の仕様がはっきりしていないようにも見えるため、 JavaScript側でSJIS(日本語文字)利用は諦めることにしました。

その他の回答 (1)

  • mrkato
  • ベストアンサー率47% (1008/2121)
回答No.1

一応質問ページのクリッカブルでは後端のゴミが混じる、は置いておいて。 Firefoxで両社CSVソースを落とす限りは、差異が無いですね。 受け取ったCSVを「数値しか必要項目はない」とみなして処理できますか。

noname#245677
質問者

お礼

回答ありがとうございます。 言葉足らずで申し訳ありません。 数値の取得は既に実装済みで、新たに「メッセージNo,節電お願い文」のマルチバイト文字を取得したく質問した次第です。

関連するQ&A

  • Ajax+Servletで文字化け

    Ajax+Servletで"I"、"II"等が文字化けしてしまいます。 以下のようにajaxを使いserver側のservletへアクセスしています。 xmlhttp = this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP"); //コールバック関数の登録 xmlhttp.onreadystatechange = display; xmlhttp.open('POST','Test',true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(null); フトントの画面はJSPで <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> で定義しています。 サーブレットはpostgresのDBから項目を取得し、htmlを返却しています。 返却したhtmlをDOMのinnterHTMLを使い、画面を書き換えています。 response.setContentType("text/html; charset=Windows-31J"); servletからhtmlを返却する際、上記のようにWindows-31Jで返却すると、javascriptで"xmlhttp.responseText"の所で "ランタイムエラーが発生しました。デバックしますか 行107 c00ce56eの為、操作を完了できませんでした。" とエラーが出てしまいます。 response.setContentType("text/html; charset=shift-jis"); 出力する際、上記のようにShift-jisで返却すると、エラーは発生しないのですが、"I"、"II"等が文字化けしてしまいます。 何か解決策ありますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • AJAX
  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • Ajaxで表示させると内容が不変

    下記Ajaxでtest.txtを表示できたのですが test.txtの内容を Hello Japan. 変えてもブラウザのキャッシュをクリアしない限り Hello World! が出つづけます。 下記ページにキャッシュ無効のヘッダをつけても同じです。 子の問題を解決する手段を教えてください。 test.txt: Hello World! x.html: <script> var xmlHttp; function loadText() {  if (window.XMLHttpRequest)  {   xmlHttp = new XMLHttpRequest();  }  else  {   if (window.ActiveXObject)   {    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   }   else   {    xmlHttp = null;   }  }  xmlHttp.onreadystatechange = checkStatus;  xmlHttp.open("GET","test.txt",true); xmlHttp.send(null); } function checkStatus() { if (xmlHttp.readyState==4&&xmlHttp.status==200) { var node = document.getElementById("disp"); node.innerHTML = xmlHttp.responseText; } } </script> <form> <input type="button" value="push" onClick="loadText()"> </form> <div id="disp"></div>

  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • ajax でのデータ受け渡しに関して

    ajax でのデータ受け渡しに関して わかりにくい内容で申し訳ありません。 現在、PHPで作成されているプログラムの中に、ajaxを組み込みたいと考えています。 処理の動きとしては、あるプルダウンが選択された場合、すぐさまその値をもとにしてDBへ 検索しに行くというものです。 通常、PHPだけの処理の場合、POST等を用いて、ボタンが押されたら違うphpファイルへ値を 送る事が可能かと思われます。 その処理をajax で選択されたらすぐに検索、表示というような動きをしたいと考えて います。 但し、同じソース、画面上の中でなら、以下のような記述で表示させる事は可能かと 思われますが、HTMLで分割した画面で、上段で選択されたプルダウンの値をもとにして、検索 された結果を下段に表示させたいと考えています。 そもそも、ajaxでは同じ画面上での受け渡ししかできず、上記のように分割されたものでは 不可能なのでしょうか。。。 初歩的な内容で申し訳ありませんが、教えて頂きたいと思います。 《記述内容》 ※ 現状では以下のようなサンプル記述をもとに、自画面(同一)上では表示が可能となっています。 <script> function createXMLHttpRequest(){ if( window.XMLHttpRequest ){ return new XMLHttpRequest(); }else if( window.ActiveXObject ){ try{ return new ActiveXObject( "Msxml2.XMLHTTP" ); }catch(e){ return new ActiveXObject( "Microsoft.XMLHTTP" ); } } return null; } function getDataPost( serverURL, objID ,obj){ var ajax = createXMLHttpRequest(); ajax.open( "POST", serverURL ); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange=function(){ if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){ if(objID!=""){ var obj = document.getElementById( objID ); obj.innerHTML = ajax.responseText; } } } ajax.send( obj.name+"="+obj.value ); } </script> <select name="fuga" onchange="getDataPost('hogehoge.php','hoge',this)"> <option value="">---</option> <option value="1">1</option> <option value="2">2</option> </select> <div id="hoge"></div> よろしくお願いします。

    • ベストアンサー
    • AJAX
  • MySQLでの文字化けについて

    すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • ajaxでサーバより取得したHTML断片文字列をブラウザに正しく表示させたい

    質問1 ajaxを利用してWebサーバから「<B>hoge</B>」のような文字列を取得することはできたのですが、それをブラウザ上に太字のhogeとして表示させたいのですが、ブラウザでタグが解釈されず「<B>hoge</B>」のまま表示されます。サーバから取得したHTML断片文字列をブラウザに解釈させて表示させるにはどうしたらよいのでしょうか。 質問2 appendChild()を繰り返し実行すると、既に取得済みの文字列に対して、新たに取得した文字列がアペンドされます。アペンドさせずにボタン押下で取得した文字列だけを画面に表示させるにはどうしたらよいのでしょうか? よろしくお願いいたします。 JavaScript var disp = document.getElementById('disp'); disp.appendChild(document.createTextNode(xmlhttp.responseText)); HTML出力位置 <div id="disp"></div>

  • Ajaxで文字化けしてしまいます

    IE6を使用しています。 UTF-8のBOMありで以下のコードを保存しています。 sample.txtに入っている「あああ」を出力すると 文字化けしてしまいます。 <script src="prototype.js" type="text/javascript"></script> を <script src="prototype.js" type="text/javascript" charset="utf-8"></script> で試しても同じ結果でした。 何が原因なのでしょうか? <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>prototype.jsサンプル</title> <script src="prototype.js" type="text/javascript"></script> <script type="text/javascript"><!-- function readText() { var sURL = "sample.txt?cache="+(new Date()).getTime(); new Ajax.Updater("result",sURL, { method: "get" }); } // --></script> </head> <body> <h1>prototype.jsサンプル</h1> <form method="get" name="ajaxForm" onsubmit="readText();return false;"> <input type="submit" value="sample.txtを読み込み"><br> </form> <div id="result"></div> </body> </html>

  • JpGaph + Ajaxでグラフを疑似ウィンドウで表示したい

    最近Ajaxを始めました。 PHP jpgraphで作成したグラフを、Ajaxで疑似ウィンドウ的に表示したいです。 graph.phpで生成したグラフを<div="graph"></div>に 埋め込む感じで、下記のようなスクリプトを書いてみました。 しかし当然バイナリデータなので、期待するような形で表示されてくれません。 どうしたらいいのか皆目検討がつかず、困っています。 ご存じの方、どうぞよろしくお願いいたします。 <html> <head> <script src="../../js/prototype.js" type="text/javascript"></script> <script type="text/javascript"> function showGraph(){ uri = "graph.php"; options = {onComplete: function(req){$("graph").innerHTML=req.responseText;}}; new Ajax.Request(uri, options); } </script> </head> <body> <input type="button" value="click" onClick="showGraph()"> <div id="graph"></div> </body> </html>

    • ベストアンサー
    • PHP
  • CSVファイルをダウンロードで文字化け

    こんにちは。 CSVファイルのダウンロードで文字化けを起こしていて困っております。 どなたか助けてくださる方がいらっしゃると大変光栄です。 機種:WindowsXP English ファイル:UTF-8 PHPコードは下記の通りです。 いろいろとHeaderを付けてみたり変えてみたりしましたが、どれも結果は同じでした・・。 Header("Accept-Ranges: none"); Header("Content-Transfer-Encoding: binary"); Header("Content-type: application/x-csv; charset=SJIS-win"); Header("Content-Disposition: attachment; filename=1.csv"); $output = '2007/08/29 こんばんわ'; print mb_convert_encoding($output,'SJIS-win','UTF-8'); アウトプットは下記の通りです。ダブルバイト全てが文字化けしてしまいます。 2007/08/29 ‚ア‚ñ‚ホ‚ñ‚í どなたか解決方法をご存知ないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう