質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • PHP

    21410questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CSV

    712questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

CSVインポートするときの文字コード変換について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,419

ssk

score 270

CSVをインポートしようとすると「文字コードをご確認ください」とエラーメッセージがでてしまいます。挙動しては正しいのですが

$detect_order = 'ASCII,JIS,UTF-8,CP51932,SJIS-win';
に追加するべき文字コードはございますか?

こちら
を参考に実装いたしました。

/* 文字コードを変換してファイルを置換 */
                $tmp_name = $_FILES['csvfile']['tmp_name'];
                $detect_order = 'ASCII,JIS,UTF-8,CP51932,SJIS-win';
                setlocale(LC_ALL, 'ja_JP.UTF-8');

                $buffer = file_get_contents($tmp_name);
                if (!$encoding = mb_detect_encoding($buffer, $detect_order, true)) {
                    // 文字コードの自動判定に失敗
                    unset($buffer);
                    throw new Exception('文字コードをご確認ください');
                }
                file_put_contents($tmp_name, mb_convert_encoding($buffer, 'UTF-8', $encoding));

補足

Coteditorで開き、エンコーディングを確認すると
Windows,DOSとなっています。

追記

$detect_order = 'ASCII,SJIS,JIS,UTF-8,CP51932,SJIS-win';
                setlocale(LC_ALL, 'ja_JP.UTF-8');

                $buffer = file_get_contents($tmp_name);
                debug(mb_detect_encoding($buffer));
                //出力結果 SJIS


でした。しかし、まだ「文字コードをご確認ください」とエラーが出てきてしまいます。

追記

OS:macOS Sierra

1.windows→Macへエクセルファイルをメール送信
2.一旦、テキストエディタで開く(文字コード:Windows,DOSと認識)
3,アップロード
4.文字コードエラー

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yambejp

    2017/04/07 09:23

    OSはなんでしょう?unix系なら「iconv -l」で使用可能なエンコードが確認できるかもしれません

    キャンセル

  • ssk

    2017/04/07 10:40

    ありがとうございます。 debug(iconv("SJIS","UTF-8",$buffer));としましたが、falseが返ってきてしまいました。

    キャンセル

  • m6u

    2017/04/07 12:30

    そもそも、読み込もうとしているCSVは誰が作っていてどんなエンコーディングの可能性があるのかわからないものなのですか?

    キャンセル

  • ssk

    2017/04/11 14:26

    読み込もうとしているCSVは不特定多数の方が作成しているので、エンコーディングの可能性はなるべく網羅しておきたいと思っていました。

    キャンセル

回答 3

checkベストアンサー

0

追記にある

debug(mb_detect_encoding($buffer));


で結果が取れているのであれば、mb_detect_encodingの第二か第三引数の問題ではないでしょうか。
疑わしいのは第三引数ですかね。
こうしてみてはいかがでしょうか。

if (!$encoding = mb_detect_encoding($buffer, $detect_order)) {

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/07 10:37

    debug(mb_detect_encoding($buffer));
    ↑こちらの出力結果はSJISとなっています。


    第三引数のtrueを削除してみましたが、エラーメッセージが表示されてしまいました。

    キャンセル

  • 2017/04/07 10:41

    となると、第二引数の問題ということになりそうです。
    debug(mb_detect_encoding($buffer));の結果がSJISですが、$detect_orderにSJISを含めてもダメなんですよね?
    ん~不可解。
    最悪の場合、全てデフォルト値でしょうかね。
    if (!$encoding = mb_detect_encoding($buffer)) {
    これなら大丈夫なんですよね。

    キャンセル

  • 2017/04/11 14:24

    返信が遅くなり、申し訳ございません。
    ひとまず、全てデフォルト値で実装しました。

    見直して、再度実装致します。

    キャンセル

  • 2017/04/11 14:28

    決定的な原因がわからなくてモヤモヤしますね。
    もし原因が判明しましたら報告していただけるとうれしいです。

    キャンセル

0

SJISくらい?

ファイルの文字エンコードを調べるなら
mb_detect_encoding

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/07 01:54

    ありがとうございます。
    情報を追記いたしました。

    キャンセル

  • 2017/04/07 07:47

    まずは今のファイルの文字コードがどうなっているのか確認してみて下さい

    キャンセル

  • 2017/04/07 10:45

    今のファイルの文字コードはWindows,DOSと表示されています。

    キャンセル

0

エンコーディングを難なく扱いたい場合、
こちらの記事が参考になるかと。

【php】はしご高が文字化けしない文字コード変換 at softelメモ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/11 14:25

    返信が遅くなり、申し訳ございません。
    参考サイトありがとうございます。

    サイトを参考に実装して参ります。

    キャンセル

同じタグがついた質問を見る

  • PHP

    21410questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CSV

    712questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。