8

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);

4

3 に答える 3

23

試す:

$csv = iconv("UTF-8", "Windows-1252", $csv);

ただし、ANSI では UTF-8 の小さなサブセットしかエンコードできないため、最終的にはデータが失われます。強い理由がない場合は、UTF-8 でエンコードされたファイルを提供してください。

于 2013-02-18T10:29:02.877 に答える
5

あなたの質問には ISO-8859-1、Windows-1252、ANSI について誤解があるため、ここで注意すべき重要なことは次のとおりです。

いわゆる Windows 文字セット (正確には WinLatin1、または Windows コード ページ 1252) は、これらの位置の一部を印刷可能な文字に使用します。したがって、Windows の文字セットは ISO 8859-1 と同一ではありません。Windows 文字セットは「ANSI 文字セット」と呼ばれることがよくありますが、これは深刻な誤解を招きます。ANSI によって承認されていません。

歴史的背景: Microsoft は、ANSI 標準のドラフトに基づいてセットの設計を行いました。Microsoftの用語集は、これを明示的に認めています。

その他のリソース:ここここ.

したがって、この質問にたどり着く他の人々の参考までに。

これに関するMSの正確な説明は次のとおりです。

Windows のコード ページを表すために使用される「ANSI」という用語は、歴史的な参考文献ですが、現在では Windows コミュニティで存続し続ける誤称です。この原因は、Windows コード ページ 1252 がもと​​もと ANSI ドラフト (国際標準化機構 (ISO) 標準 8859-1 となった) に基づいていたという事実に由来しています。「ANSI アプリケーション」は通常、非 Unicode またはコード ページ ベースのアプリケーションを指します。

于 2013-09-23T10:06:17.967 に答える