

PHP5.4(Cakephp2の環境)で文字コードのUTF-8でCSVを作成したいのですが、メモ帳で出力した文字コードを見てみるとANSIになってしまっている形です。どう修正すれば実現できるでしょうか。よろしくお願いいたします。

[code]

    <?php
    class HelloShell extends AppShell {
        public function main()
        {
            header('Content-Type: application/octet-stream; charset=UTF-8');
            $array = array(mb_convert_encoding("Windows", "UTF-8"),
                mb_convert_encoding("Mac", "UTF-8"),
                mb_convert_encoding("Linux", "UTF-8")
            );
    
            $file = fopen("test.csv", "w");
            if($file){
                var_dump(fputcsv($file, $array));
            }
            fclose($file);
        }
    }
    
[/code]


CC BY-SA 4.0
2019-04-22T13:49:30.517
54401
2019-04-24T04:09:08.143
17348
question
php cakephp
UTF-8でCSVを作成したいが、ANSIで出力されてしまう。


ファイルの先頭にUTF-8を示すBOMがWriteされていないからでしょう。  
[PHP
エクセルで文字化けさせないCSVの作り方](http://dev.blog.fairway.ne.jp/php%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%81%A7%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%81%95%E3%81%9B%E3%81%AA%E3%81%84csv%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/)  
以下のようにCSVデータ書き込みの前に追加しておけば良いのでは？

[code]

            if($file){
                fwrite($file, '\xEF\xBB\xBF');
                var_dump(fputcsv($file, $array));
            }
    
[/code]

* * *

**注)**  
コメントされたように、出力されたCSVファイルを取り扱うソフトによっては、かえってBOMがあると誤動作をする場合があるので、対象ソフトの仕様を確認してからの方が良いでしょう。

ちなみに近々行われるWindows10 19H1アップデートで、メモ帳も色々改善されるようです。  
[「メモ帳」に多数の改善、BOMなしUTF-8がデフォルト保存形式に ～「Windows 10
19H1」](https://forest.watch.impress.co.jp/docs/news/1157696.html)


CC BY-SA 4.0
2019-04-22T17:17:12.210
54403
2019-04-22T23:05:23.977
2019-04-22T23:05:23.977
26370
26370
54401
answer


とりあえず、php上で “Windows” や “Mac” が、どういうバイト値からどういうバイト値に変わったか、確認してみればどうですか。  
その後、UTF-8 について調べればいいと思います。  
知識が足りていないと思います。


CC BY-SA 4.0
2019-04-24T04:09:08.143
54445
2019-04-24T04:09:08.143
29996
54401
answer