- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列データをCSVでダウンロードしたい)
配列データをCSVでダウンロードするための方法
このQ&Aのポイント
- ヤフーのAPIを利用して提供される配列データをCSVでダウンロードする方法について質問です。APIで提供されるデータはUTF-8であるため、ダウンロードしたデータが文字化けしてしまいます。この問題の対処方法を教えてください。
- 配列データをCSVでダウンロードするには、配列データを別ファイルに渡す必要がありますが、文字列が長すぎて正常にデータを渡すことができません。また、ヤフーAPIに連続アクセスすることも避けたいです。この問題に対する理想的な解決策を教えてください。
- ヤフーのAPIを利用した配列データのCSVダウンロード方法についての質問です。提供されるデータはUTF-8であるため、ダウンロードしたデータが文字化けしてしまいます。この問題の対処方法を教えてください。また、配列データを別ファイルに渡す際の文字列長の問題にも対処したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> APIで提供されているデータはUTF-8なので、上記のようにmb_convert_encoding()を使っていますが、文字化けでダウンロードしたデータを読むことが出来ません。 文字化けというのは「使われている文字コード」と「読み込むプログラムが認識している文字コード」が一致しないときに発生します。 なので、「ダウンロードしたファイルの文字コードは何か」を確認して、その文字コードを指定すれば理屈上は文字化けになりません。 (提案) ブラウザかテキストエディタでcsvファイルを開いてみる 一番確実なのはダウンロードソフトでCSVファイルをダウンロードして、ブラウザないしテキストエディタで開いてみる事です。 このとき、文字コードをいろいろ指定して文字化けしない文字コードがあったら、それがCSVファイルで使われている文字コードになります。 そこから一つ一つ問題を切り分けしていけば、問題点が明確になって解決の目処も立つと思います。 ちなみに、OpenOfficeを使うと読み込むときに文字コードを指定できるようです。 (MS Excel2000 はShift_JIS決め打ち…かもしれません。) > また、2つ目の質問ですが、配列データをCSVでダウンロードするために、配列データを別ファイルに渡しているのですが、 「配列データを別ファイルに渡している」の下りがよくわかりません…。 具体的にどうしているのか、を補足していただけるとよりクリティカルな回答がつくかなと思います。
お礼
think49様 こんばんは。ご親切なアドバイスをありがとうございます! アドバイスいただいてから、色々と試しているのですが、いまだ解決できるに至っておりません。。 csv形式でダウンロードさせているのですが、アドバイスのようにブラウザで開こうとするものの、何故かエクセルで開かれてしまい、またエディタで開いてコードを調べようとしましたが、どれも解決の糸口さえ見えずにいる次第です。(ダウンロードせずに、ダウンロードすべくデータをブラウザで表示させると、UTF-8になっているのですが、ブラウザからエンコードの変更をしても反映されません) また、 > また、2つ目の質問ですが、配列データをCSVでダウンロードするために、配列データを別ファイルに渡しているのですが、 これですが、APIから渡された配列データをCSVにてダウンロードさせる別ファイルに渡すため、配列データをimplodeで変数に収めてGETで渡し、渡されたデータをexplodeで配列に戻し・・・といったことをしています。 APIで渡された配列をCSVとしてダウンロードさせる別ファイルにわたすとき、 $array_data = urlencode(implode(",", $items)); echo "<a href=\"./csv.php?query=$array_data\">CSV</a>"; とし、ダウンロードファイルはさせるファイルは、 $query_data = $_GET["query"]; $items = explode(",", $query_data); header("Content-Type: application/csv; charset=Shift_JIS"); header("Content-Disposition: attachment; filename=$fname.csv");//一意なファイル名となるようしている $csv_line = implode("\n", $items); print(mb_convert_encoding($csv_line, "SJIS", "UTF-8")); と、こんな感じで行っているのですが、文字化けはもちろん、以上のようなやり方だと、配列データに日本語が入っていると、implodeにて変数に代入すると、文字数がとたんに長くなり、上手くデータを渡すことが出来ずにいる次第です。
補足
think49様 お世話になっております。 直接的な解決とは違うのですが、なんとか正常に文字化けせずにダウンロードさせることが出来ました。 質問1の対処:mb_convert_encodingを利用せずに出力することで文字化け解消。 質問2の対処:APIを利用しているため、ダウンロードさせる時は再使用せずに、と考えていましたが、再度APIにつないで解消。 ご親切な対応ありがとうございました。