私はこれを数時間の調査の後に投稿します(数回...)。まだ答えが見つかりませんでした。
私の目標は、PHPを使用してCSVファイルを作成することです。このファイルには中国語のANSIエンコーディングが必要です(簡体字中国語の場合はGB2312だと思いますが、notepad ++ではANSIのみがエンコーディングとして表示されます)。別のツールにインポートする必要があります。
[重要な注意点]
現在、notepad++と中国語をデフォルト言語とするPCでファイルを変換しています。プロセスは次のとおりです。
- WebアプリからUTF8CSVを取得します
- 中国のPCでExcel2003を使用してcsvとして保存
- notepad ++で開き、エンコーディングはすでにANSIです。先頭の「?」を1つ削除してください。ファイルの先頭。
テストを実行しました。.csvファイルを.phpに変更し、次のコードに置き換えて、同じエンコーディングを維持します。
<?php echo mb_detect_encoding("test"); ?>
これにより、「ASCII」と出力されます。
次に、CSVの出力を確認する必要があります:GB2312?、ASCII?、ANSI?。私はそれらの違いについてさえはっきりしていません。
また、Excel2007で中国語のPCでCSVとして保存されたファイルはこのツールで問題ないことも読みました。
[/重要な注意点]
現在、私はそれを正しくすることができません!notepad ++で取得したファイルを開くと、UTF-8でエンコードされているものとしてエンコードが表示されます。そして、漢字は見栄えが良いので、「壊れている」ように見えるはずです:-)。
次のヘッダー条件を使用しています。
header("Content-type: text/csv; charset=GB2312");
header("Content-Disposition: attachment; filename=$filename.csv");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Expires: 0");
[追加情報]
私のファイルのコーディング方法は次のとおりです(簡単にするために抽象化しました)
//header, hard coded in Chinese
$csv = "东西,东西,东西\n"; //example "stuff,stuff,stuff"
[...]
//write line by line, status is also hard coded (行)
$csv .= $DB_data_1.",".$DB_data_2.",行\n"; //行=OK
[/追加情報]
また、CSV文字列を印刷する前にiconvを使用してGB2312に変換します(mb_convert_encodingも試しました)
setlocale(LC_ALL,'zh_CN');
$csv = iconv("UTF-8","GB2312",$csv);
echo($csv);
私の.phpファイルはUTF-8エンコーディングで書かれています(BOMなしのUTF-8ではありません)
基本的に、私は常に出力としてUTF-8ファイルを取得します。ANSIが必要です。パラメータ/属性が非常に多いようですが、正しくありません。あなたの助けをいただければ幸いです!
ありがとう!
デビッド
[追加情報]
例として、私のヘッダーの列では、次のエンコード変更があります。
- PHPソースコード(UTF-8ファイル、英語のコンピューター):序序号(意味:SKU、アイテムコード)
- 最終的なCSVファイル(ANSIファイル、英語のコンピューター):ÉÌÆ・ÐòºÅ
- 最終的なCSVファイル(ANSIファイル、中国のコンピューター):序序号
[/追加情報]