2

クライアントが一部の MySQL データを Excel で表示できるようにしようとしています。次のように、PHPの fputcsv() 関数を使用しました。

public function generate() {
   setlocale(LC_ALL, 'ko_KR.UTF8');

   $this->filename = date("YmdHis");
   $create = $this->directory."Report".$this->filename.".csv";

   $f = fopen("$create","w") or die("can't open file");
   fwrite($f, "\xEF\xBB\xBF");

   $i = 1;
   $length = count($this->inputarray[0]);

   fwrite($f, $this->headers."\n");

   // print column titles
   foreach($this->inputarray[0] as $key=>$value) {
    $delimiter = ($i == $length) ? "\n\n" : ",";
    fwrite($f, $key.$delimiter);
    $i++;
   }

   // print actual rows
   foreach($this->inputarray as $row) {
    fputcsv($f, $row);
   }
   fclose($f);
  } 

私のクライアントは韓国人で、MySQL データベースのかなりの部分に utf8_unicode_ci の値が含まれています。上記の関数を使用して、正しくエンコードされたデータを含む CSV ファイルを正常に生成し、自分のマシン (英語では Win7) の Excel では正常に開きますが、クライアント コンピューター (韓国語では Win7) の Excel でファイルを開くと、文字がまた壊れました。ヘッダー (\xEF\xBB\xBF) を取り出し、setlocale をコメントアウトしようとしましたが、役に立ちませんでした。

これを理解するのを手伝ってもらえますか?

4

3 に答える 3

1

あなたが言うように、CSVファイルに「正しくエンコードされたデータ」がある場合、つまり、有効なUTF-8バイトストリームが含まれている場合、クライアントのサイトのファイルのバイトストリームが同じであると仮定します(たとえば、破損していませんファイル転送の問題による転送中) の場合、クライアントのマシン上の Excel が UTF-8 を正しく解釈しないという問題のように聞こえます。これは、サポートされていないか、インポート時にエンコードを示すためにいくつかのオプションを選択する必要があるためである可能性があります。そのため、別のエンコーディング (mb_convert_encodingまたはを使用iconv) でファイルを作成してみてください。

クライアントに韓国語の文字を含む CSV をエクスポートしてもらうと、そのファイルを見て、生成されているエンコーディングを判断できます。次に、そのエンコーディングを使用してみてください。

于 2011-01-28T13:40:20.103 に答える
0

データを UTF-16LE としてエンコードしてみて、ファイルに適切な BOM があることを確認してください。

または、CSV ではなく Excel ファイルをクライアントに送信すると、エンコーディングは問題になりません。

于 2011-01-28T08:55:22.873 に答える
-1

各 fwrite 呼び出しでテキストを でラップしてみてくださいutf8_encode

次に、ここで提案されているものを使用します: http://www.php.net/manual/en/function.fwrite.php#69566

于 2011-01-28T02:27:49.917 に答える