読者です 読者をやめる 読者になる 読者になる

mazeltov7のweb断片

備忘録的なテキトーなことを書きます。間違ってたり、ツッコミあればお願いします。

csv(utf-16le)のファイルから良い感じに情報を取得する

これはなに

google play storeのレビューをslackにポストする、ってのをしようとして、データを良い感じにとるところで、文字化けとかデータにゴミが入ったりなどでつらみあったので、メモ。

やったこと

まずレビューcsvを取得するところは、提供されてるgsutilを使う。
以下とかに書いてあるのを適当に見て使う。 Android - アプリのレビューを HipChat で自動通知する - Qiita

データcsv取得自体は、gsutil cp gs://<report bucket ID>/reviews/reviews_<package name> /path/to/your/local/dirとやって取ったりする。
で、ここから

<?php
$file = '/path/to/reviews.csv';
$data = file_get_contents($file);
$data = mb_convert_encoding($data, 'UTF-8', 'utf-16le'); // これ大事
$temp = tmpfile();
$csv  = array();
fwrite($temp, $data);
rewind($temp); 
while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
    $csv[] = $data;
}
fclose($temp);
var_dump($csv);

レビューcsvがutf-16leでできてるので、これを指定すると文字化けせず、ゴミも除去した形で取得できる。ちょとハマったのでメモ。
あと、ここも参考になりました。PHPのテクメモ » Blog Archive » UTF-16LEをUTF-8に変換したら末尾の文字が消える

以上