DBにある値からcsv文字列を作成します。最終的な文字列は$ csv変数に保存されます。
今、私はこの文字列をダウンロード用に提供しています:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=whatever.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $csv;
たとえば、これをNotepad ++で開くと、Ansi as UTF-8と表示されます。どうすればそれをAnsiだけに変更できますか?
私は試した:
$csv = iconv("ISO-8859-1", "WINDOWS-1252", $csv);
それは何も変わりませんでした。
ありがとう!
解決策: $ csv = iconv( "UTF-8"、 "WINDOWS-1252"、$ csv);
試してください:
$csv = iconv("UTF-8", "Windows-1252", $csv);
ただし、ANSIはUTF-8の小さなサブセットしかエンコードできないため、最終的にはデータが失われます。それほど強い理由がない場合は、UTF-8でエンコードされたファイルを提供してください。
あなたの質問にはISO-8859-1、Windows-1252、ANSIについて誤解があるので、ここで注意すべき重要なことは次のとおりです。
いわゆるWindows文字セット(正確には、WinLatin1、またはWindowsコードページ1252)は、印刷可能な文字にこれらの位置の一部を使用します。したがって、Windowsの文字セットはISO8859-1と同一ではありません。 Windowsの文字セットは「ANSI文字セット」と呼ばれることがよくありますが、これは非常に誤解を招く恐れがあります。 ANSIによって承認されていません。
歴史的背景:マイクロソフトは、ANSI規格のドラフトに基づいてセットの設計を行いました。 A Microsoftによる用語集はこれを明示的に認めています 。
したがって、この質問に終わる他の人々のための参考までに。
これに関するMSの正確な説明は次のとおりです。
Windowsコードページを表すために使用される「ANSI」という用語は歴史的な参照ですが、今日ではWindowsコミュニティで存続している誤った名称です。これの原因は、Windowsコードページ1252が元々ANSIドラフトに基づいていたという事実にあります。これは、国際標準化機構(ISO)標準8859-1になりました。 「ANSIアプリケーション」は通常、非Unicodeまたはコードページベースのアプリケーションへの参照です。
特殊文字を変換するときのデータ損失を回避するには:
setlocale(LC_CTYPE, "fr_FR.UTF-8"); //set your own locale
$csv = iconv("UTF-8", "WINDOWS-1252//TRANSLIT//IGNORE", $csv);